【问题标题】:Selenium Python - send_keys funky behaviorSelenium Python - send_keys 时髦的行为
【发布时间】:2020-03-10 03:08:17
【问题描述】:

在 PhantomJS (python 2.7) 中使用 Selenium 我在页面上找到一个文本框 (Cisco Unity 7 FYI),并尝试发送密钥。

driver.find_element_by_id("pwdPwdPassword").send_keys("12345678")
driver.save_screenshot('screen.png')

查看屏幕截图,实际上只发送了 2 个键。不确定哪些是 Unity 掩盖了密码。我注意到,如果我在 IDLE 中浏览我的脚本并慢慢进入

driver.find_element_by_id("pwdPwdPassword").send_keys("1")
driver.find_element_by_id("pwdPwdPassword").send_keys("2")
driver.find_element_by_id("pwdPwdPassword").send_keys("3")
driver.find_element_by_id("pwdPwdPassword").send_keys("4")
....

击键实际上进入了文本框。我尝试在脚本中的每个 send_keys 之间放置一个 time.sleep(2),但结果是相同的。我希望有一个技巧,这样我就不必在我的脚本中添加 30 秒来输入这个密码!

谢谢!!!

【问题讨论】:

  • 您使用的是什么版本的 webdriver?你使用的是什么浏览器?不同的页面或浏览器是否存在相同的行为?如果这种情况仅取决于应用程序,我唯一的建议是制作您自己的“棘手”发送密钥方法。比如def send_keys( element, keys_to_send): for key in keys_to_send: element.send_keys(key)(当然要先定义元素)
  • 对不起! WebDriver 2.37.2,PhantomJS 1.9.2。我已经用 Chrome 对其进行了测试,它可以工作,所以我猜它是一个 PhantomJS 问题。我需要一个无头浏览器,你知道它是否可以与 Chrome 一起使用?谢谢
  • 在 Ubuntu 上我使用的是 pyvirtualdisplay 库。在我的情况下,它实际上是虚拟显示器上的 Chromedriver
  • 这将在 Windows 机器上运行,我可以设置 xming 或远程 xserver 将显示发送到,但我希望没有它我可以做到这一点。看来 phantomjs 是我唯一可以在没有本地 gui 的情况下运行的浏览器。
  • 太糟糕了。所以,使用我棘手的网络或类似的东西。或者你可以通过 js 粘贴值。成千上万的解决方法:)

标签: python selenium


【解决方案1】:

作为一个选项,尝试使用 jQuery:

def enter_password(driver, password):
    driver.execute_script("""$("#pwdPwdPassword").val('%s');"""" % password) 
    ## id must be unique per page

【讨论】:

  • 我给了你一个赞成票,但我不能接受这个答案,因为它对我不起作用。为了解决我的问题,我最终做了一些标签魔术。我发现文本框之前的元素给我带来了问题,并将该元素发送给 Keys.TAB。基本上试图找到它之前的元素,然后像在 irl 键盘上一样点击它。然后 send_keys 正在工作。为什么我必须使用它,不知道,但它有效,所以我很高兴 :)
  • 在这种情况下,您也可以尝试在发送密钥之前单击它。
【解决方案2】:

也许你应该像这样存储输入字段对象:

input_field = find_element_by_id("pwdPwdPassword")
input_field.send_keys("12345678")

如果这不起作用,请尝试更新您的 PhantomJs 网络驱动程序

【讨论】:

    猜你喜欢
    • 2018-08-09
    • 2021-08-02
    • 2018-06-18
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多