python - 使用 Splinter + PhantomJS (Python) 访问表单

标签 python selenium-webdriver phantomjs splinter

我正在尝试填写此网站上的用户名和密码框:http://www.youwager.eu/welcome/

这是相关的 html:

<input type="text" class="form-control" name="customerid" id="customerid" placeholder="Account Number">

使用 Firefox 时,一个简单的 browser.fill('customerid', login) 可以工作,但我无法让 phantomJS 与该元素交互。它抛出以下错误:

<class 'selenium.common.exceptions.InvalidElementStateException'> , InvalidElementStateException()

重现问题的代码:

from splinter import Browser
browser=Browser('phantomjs') #=Browser() uses firefox, and works
browser.visit('http://www.youwager.eu/welcome')
browser.fill('customerid', login)

使用 Splinter 0.5.4、Selenium 2.43.0、PhantomJS 1.9.7.0

最佳答案

问题在于,PhantomJS 默认情况下的视口(viewport)大小为 400x300,并且页面会更改其布局以实现更小的宽度,其中字段不可见,因此无法通过 WebDriver API 进行交互。

你有两个选择。您可以更改脚本以考虑由于媒体查询而导致的不同页面布局,或者通过代码更改浏览器窗口大小。

使用 Selenium 可以这样完成(来自 here ):

driver.set_window_size(1234, 987)

根据代码( 12 ),您似乎可以这样做:

from splinter import Browser
browser=Browser('phantomjs')
browser.driver.set_window_size(1234, 987)
browser.visit('http://www.youwager.eu/welcome')
browser.fill('customerid', login)

关于python - 使用 Splinter + PhantomJS (Python) 访问表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28920575/

相关文章:

python - 将 Pandas Dataframe 和 numpy 数组写入通用 Excel 文件

java - 如何在 TestNG 中根据条件排除组?

python - 如果我必须直接单击横幅并在另一个选项卡上打开它,如何使用 selenium 获取重定向链?

javascript - 如何检测ajax驱动的网站

python - 在局部函数范围内使用的全局语句

python - 在 for 循环中运行多个蜘蛛

C# Selenium 如何使用 Safari 技术预览

angularjs - 如何在 Angular 单元测试中模拟窗口滚动?

javascript - Phantomjs无法通过aspx从HTML网站获取刷新内容

python - 向 rabbitmq 发送 celery 任务消息