用Selenium/Splinter擦除延迟的ajax



我正在尝试编写一个脚本,以确定潜在的新家庭是否有可用的Verizon FiOS服务。

不幸的是,该网站对javascript的广泛使用使一切都无法正常工作。我使用selenium(封装在split模块中)让javascript执行,但我无法通过第二个页面。

以下是脚本的简化版本:

from splinter import Browser
browser = Browser()
browser.visit('https://www.verizon.com/FORYOURHOME/ORDERING/OrderNew/OrderAddressInfo.aspx')
nameAddress1 = "ctl00$body_content$txtAddress"
nameZip = "ctl00$body_content$txtZip"
formFill = {nameAddress1: '46 Demarest Ave',
            nameZip: '10956'}
browser.fill_form(formFill)
browser.find_by_id('btnContinue').first.click()
if browser.is_element_present_by_id('rdoAddressOption0', wait_time=10):
    browser.find_by_id('rdoAddressOption0').first.click()
    browser.find_by_id('body_content_btnContinue').first.click()

在本例中,它在请求确认地址时选择第一个选项。

它以ElementNotVisibleException出错。如果我删除is_element_present检查,它会出错,因为它找不到元素。该元素在selenium控制的实时浏览器中是可见和可点击的,但selenium似乎没有看到页面HTML的更新版本。

作为一种替代方案,我认为我可能可以进行POST请求,并用请求处理响应或机械化,但有一种有趣的重定向,我无法理解。

我该如何让selenium正常工作,或者绕过javascript/ajax,使用get和POST请求?

问题是,通过设置display: none样式,您正在单击的输入实际上是隐藏的。

要解决此问题,请执行javascript代码单击输入并设置checked属性:

browser.execute_script("""var element = document.getElementById('rdoAddressOption0');
                          element.click();
                          element.checked=true;""")
browser.find_by_id('body_content_btnContinue').first.click()

相关内容

  • 没有找到相关文章

最新更新