【问题标题】:Selenium clearing and typing in text into textarea text box [Python]Selenium 清除并在 textarea 文本框中输入文本 [Python]
【发布时间】:2020-01-15 05:55:16
【问题描述】:

我正在使用 Selenium 进行一些抓取。我使用以下代码将文本输入到textarea 文本框中:

def clear_and_send_key_then_wait(element, key, sleep_time = 1):
# For some reason this does not work
#     element.clear() 

# This works
    element.send_keys(Keys.CONTROL + "a");
    element.send_keys(Keys.DELETE);

# Input text
    element.send_keys(key)
    time.sleep(sleep_time)

target_textbox = driver.find_element_by_xpath(
"""/html/body/div[2]/div/div[2]/div[1]/div[4]/div[1]/div/textarea""")
clear_and_send_key_then_wait(target_textbox, 'z'*100000)

Q1:为什么element.clear()不删除文本框中已有的文本?

由于要在文本框中输入大量文本,所以上述方法太慢了。相反,我使用第一个 Javascript 方法 execute_script 建议 here

但是,仅执行以下操作不会填充文本框。

driver.execute_script("arguments[0].value=arguments[1];", 
                      target_textbox, "z"*100000)

文本仅出现在紧跟在execute_script 行之后的另一个send_key 命令之后:

driver.execute_script("arguments[0].value=arguments[1];", 
                      target_textbox, "z"*100000)
target_textbox.send_keys(Keys.ENTER)

Q2:为什么需要后面的target_textbox.send_keys(Keys.ENTER)?似乎在链接中,作者不需要发送 Enter 键。它是不同类型的文本框吗?如果有,有哪些不同类型的文本框,它们是否都有不同的行为?

提前致谢!

【问题讨论】:

  • 您可以访问后端代码吗?有许多不同的方法可以为您的网页创建文本框,请参阅以下 3 个链接。 docs.angularjs.org/api/ng/input/input%5Btext%5D, w3schools.com/tags/tag_input.asp, getbootstrap.com/docs/4.0/components/forms
  • 感谢乔尔特加!不,我没有。我们可以从页面来源看出吗?
  • 你可以得到一个 Chrome 插件来告诉你它使用 angular 还是 react。谷歌“反应插件铬”或“角度插件铬”。但老实说,这并不能真正帮助回答他们为什么表现不同的问题。根据文本框的用途,可以有目的地将其设计为不同的行为。
  • @DebanjanB 随时回答问题的任何子部分!
  • 您使用的是哪个浏览器和版本?您使用的是哪个网络驱动程序和驱动程序版本?

标签: javascript python html selenium selenium-webdriver


【解决方案1】:

Selenium 在清除时不会触发任何键盘或鼠标事件。使用 JavaScript 设置值时也会发生同样的情况。网站可能会等待 keys 事件为 textarea 的值进行一些工作,并触发 send_keys 与任何键。

你可以试试下面的代码,\ue007是回车键:

driver.execute_script("arguments[0].value=arguments[1];", target_textbox, "z"*100000 + "\ue007")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多