【发布时间】: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