通过 Selenium 和 Python 和 JavaScript 使 WebElement 可见

Posted

技术标签:

【中文标题】通过 Selenium 和 Python 和 JavaScript 使 WebElement 可见【英文标题】:Make WebElement visible via Selenium with Python with JavaScript 【发布时间】:2014-11-01 18:05:00 【问题描述】:

我正在尝试通过 selenium 上传 png。我的问题是,我需要使用的输入对 selenium 不可见,但对用户不可见。在 Selenium 的常见问题解答中,他们告诉我使用 javascriptExcecutor,例如:

((JavascriptExecutor)driver).executeScript("arguments[0].style.visibility = 'visible'; arguments[0].style.height = '1px'; arguments[0].style.width = '1px'; arguments[0].style.opacity = 1", fileUploadElement);

我过去在 C# 中使用过它,并且它有效,但现在我正在努力将这种用法转换为 python。我会使用document.getElementByName() 函数,但输入没有名称,并且页面上不止一个。解决该问题的最佳方法是什么。我已经试过了

icon = element.find_element_by_css_selector("input")
script_befehl = icon+".style.visibility = 'visible'; "+icon+".style.height = '1px'; "+icon+".style.width = '1px'; "+icon+".style.opacity = 1

但这也不起作用,我遇到了语法错误

【问题讨论】:

对 Selenium 不可见但对用户不可见?这是如何运作的?听起来有一个额外的步骤来“让它可见”你没有做。你确定它是隐形的?如果你与之交互,Selenium 会做什么? 【参考方案1】:

在我的例子中,元素的不可见性是由于样式中有display:none;。 所以解决方案是:

driver.execute_script("arguments[0].style.display = 'block';", element)

【讨论】:

【参考方案2】:

驱动实例上有一个execute_script()方法,参数以类似于C#的JavascriptExecutor的方式传递给它:

icon = element.find_element_by_css_selector("input")
driver.execute_script("arguments[0].style.visibility = 'visible'; arguments[0].style.height = '1px'; arguments[0].style.width = '1px'; arguments[0].style.opacity = 1", icon)

【讨论】:

这比想象的要容易,但是在脚本之后,webelement仍然不可见,还有其他方法可以上传我的文件吗? @user3652291 嗯,让我们看看,你能尝试一下“actionchains”方法吗?请参阅:***.com/a/7340952/771848。让我知道它是否有帮助。谢谢。 我试过这样 ActionChains(driver).move_to_element(icon).send_keys_to_element(icon,largepic).perform() 但我收到错误:“元素内的偏移量无法滚动到视图中:( 72, 12.5)" @user3652291 hm,你能分享网站的链接和你的代码吗?否则我会在黑暗中拍摄。谢谢。

以上是关于通过 Selenium 和 Python 和 JavaScript 使 WebElement 可见的主要内容,如果未能解决你的问题,请参考以下文章

python selenium模拟滑动操作

通过 Selenium 和 python 切换到 iframe

如何根据提供的HTML通过Selenium和Python搜索节点?

使用Chrome驱动程序通过python和selenium在指定位置下载文件

如何通过 Python 使用 GeckoDriver 和 Firefox 使 Selenium 脚本无法检测?

如何通过Selenium和Python按照网站点击文本为LOGIN的元素?