【问题标题】:How can I click (bypass) a submit button using Python Selenium, when the button gets disabled after using .clear() or .send_keys()?当使用 .clear() 或 .send_keys() 后按钮被禁用时,如何使用 Python Selenium 单击(绕过)提交按钮?
【发布时间】:2017-04-27 20:32:56
【问题描述】:

正如标题所说,当使用clearsend_keys方法后按钮变为“disabled”时,我如何使用Selenium.click()button


之前:


当我打开它时页面状态是url...但是在我运行我的代码以找到textboxreplace 它的值之后,该元素得到disabled(可能通过某种JS) 在我 clear 它的内容之后,或者使用 send_keys 向它写一些东西。


之后:


代码:

txt_value = driver.find_element_by_xpath('//input[@id="txtValor4"]')
txt_value.clear() #this disables the button
txt_value.send_keys(str(123,45)) #this also disables the button

我的问题是:

如何绕过此网站保护并按下Continuar 按钮?

我曾考虑禁用 JS,但整个网站都依赖它来生成所需的文档.. 错误的选择。

所以我考虑使用按钮属性来模拟按钮的按下......只是不知道这是否可能,或者我怎么能做到这一点。

另一个选项是仅阻止 JS 禁用按钮,可能使用 inspect elementnetwork tools 映射命令来自的位置...

那么有什么办法可以做到吗?

ps.:我无法提供 URL,因为它需要我的登录数据。

【问题讨论】:

  • 听起来它由于表单验证而被禁用,因为它不喜欢您在文本字段中输入的值。可能是文本字段没有注册更改。您可以尝试在 send_keys 之后单击文本区域外部以使其“接受”更改
  • 不幸的是,这不是问题!我在clear()send_keys() 方法之后立即拍摄了这张照片。我可以找到元素,清除它的值并插入正确的值。 clear()send_keys() 方法是我问题的根源。当我运行它们时,某些东西会触发站点的“禁用按钮”保护方法......但如果我使用 b.send_keys(Keys.BACKSPACE) 它就可以了!我可以在不禁用按钮的情况下清除内容...但是当我使用send_keys('123,45')(带值)时,按钮会被禁用。

标签: python python-3.x selenium web-scraping


【解决方案1】:

好的,所以您不能通过正常方式直接执行此操作。 Selenium WebDriver 用于模拟浏览器的实际使用。但是,可以使用 execute_script 函数。 (Java Selenium 有一个内置的 JavascriptExecutor 类,我假设这是 python 的版本。)execute_script 函数允许 Selenium 执行人类与浏览器交互无法执行的任务。

driver.execute_script("document.getElementById('buttonid').click()")

或者类似的东西应该可以工作。希望对您有所帮助。

【讨论】:

  • 你的回答启发了我!我可以使用driver.execute_script("document.getElementById('textboxID').value = 123.45") 绕过这个,将值传递到文本机器人,所以按钮没有被禁用,我可以按下继续按钮。非常感谢您为帮助我所做的努力!
  • 很高兴它有帮助:)
【解决方案2】:

如果您没有使用 selenium 和 javascript 获得任何解决方案,您可以使用 Sikuli 概念。要单击该元素,请拍摄“Continuar”按钮的图像并将其保存在资源文件夹中。

String elementImg=Path of the Image;
    screen.click(elementImg);

【讨论】:

  • 我标记了 JS,因为该网站正在使用 JS……我的代码实际上是在 Python 中。无论如何,感谢您的帮助,我从未听说过Sikuli Concept! ;-)
【解决方案3】:

我可以使用driver.execute_script("document.getElementById('txtValor4').‌​value = 123.45") 绕过这个,将值传递到文本框,所以按钮没有disabled,我可以按下Continue 按钮。

即使绕过这个,结果也不是预期的!我输入的值应该被某种兴趣纠正。但绕过这一点,该值不会被纠正。

今天询问程序的用户告诉我,每次我更改此textbox 中的值时,我都必须按下Calculate 按钮。

因此,我可以使用以下方法解决我的问题,而不是低效地绕过这个 disable 方法:

b = driver.find_element_by_xpath('//input[@id="txtValor4"]')
b.clear()
b.send_keys('123.45')

driver.find_element_by_xpath('//input[@id="btnCalcular4"]').click()
driver.find_element_by_xpath('//input[@id="btnContinuar4"]').click()

通过这种方式,税值会根据利息进行校正,并且网站会生成 .pdf,其值与我所期望的完全相同。

非常感谢所有花费时间和精力帮助我的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 2016-05-31
    • 2013-10-02
    • 2022-10-22
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多