【问题标题】:TypeError when sending keys to text field with Selenium in Python在 Python 中使用 Selenium 向文本字段发送键时出现 TypeError
【发布时间】:2018-09-14 21:29:21
【问题描述】:

我在尝试使用 Python 将文本发送到文本字段时遇到了一个非常奇怪的问题。

这是我的代码:

keyword_text_field = driver.find_element_by_xpath('//*[@id="558450155"]')
keyword_text_field.clear()
keyword_text_field.send_keys('Ford')
search_button = driver.find_element_by_xpath('//*[@id="mountNode"]/div/div[4]/div[3]/div[1]/div[1]/div/div[2]/div/div[18]/div[2]/button')
search_button.click()

网址如下: https://www.autotrader.com/cars-for-sale/searchresults.xhtml?zip=84025&keywordPhrases=rebuilt%20title&startYear=2014&endYear=2018&sellerTypes=p&searchRadius=0&sortBy=derivedpriceDESC&numRecords=25&firstRecord=0

这是我得到的错误:

File "/Users/rodrigopeniche/Documents/workspace/WebScraping/AutoTraderScraper.py", line 34, in search_for_keyword
keyword_text_field.send_keys('Ford')
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webelement.py", line 478, in send_keys
{'text': "".join(keys_to_typing(value)),
File "/Library/Python/2.7/site-packages/selenium/webdriver/common/utils.py", line 150, in keys_to_typing
for i in range(len(val)):
TypeError: object of type 'WebElement' has no len()

我的环境技术规格如下:

  • Python 2.7
  • 铬 68.0.3440.106
  • Chromedriver 2.42
  • 硒 3.13

知道为什么会这样吗?将密钥发送到同一站点中的其他文本字段没有问题。

【问题讨论】:

  • 错误堆栈跟踪中的错误命令keyword_text_field.send_keys(keyword_text_field)不匹配您的代码keyword_text_field.send_keys('Ford')
  • 谢谢。已编辑
  • stacktrace 仍然与您的代码不匹配

标签: python selenium google-chrome web-scraping


【解决方案1】:

你不清楚什么错误,但很可能你需要等待 element.您还可以获得更好的选择器,如下面的代码:

keyword_text_field = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".accordion-panel-input input")))
keyword_text_field.clear()
keyword_text_field.send_keys('Ford')
driver.find_element_css_selector("button[type=submit]").click()

【讨论】:

    【解决方案2】:

    我无法使用相同的代码重现您的错误;假设是因为浏览器、驱动程序或 Selenium 版本的差异。

    另外,请记住:不同的浏览器可以以不同的方式解析 HTML/XML,因此您可能会发现使用 xPath 的浏览器之间存在差异。 CSS 选择器更可取,而且更容易避免深度嵌套的路径。

    环境

    • 操作系统:macOS 10.10.5
    • Python:3.6.1
    • :3.14.0
    • 壁虎驱动:0.21.0
    • 火狐:62.0

    代码

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    
    driver = webdriver.Firefox()
    driver.get("https://www.autotrader.com/cars-for-sale/searchresults.xhtml?zip=84025&keywordPhrases=rebuilt%20title&startYear=2014&endYear=2018&sellerTypes=p&searchRadius=0&sortBy=derivedpriceDESC&numRecords=25&firstRecord=0")
    keyword_text_field = driver.find_element_by_xpath('//*[@id="558450155"]')
    keyword_text_field.clear()
    keyword_text_field.send_keys('Ford')
    search_button = driver.find_element_by_xpath('//*[@id="mountNode"]/div/div[4]/div[3]/div[1]/div[1]/div/div[2]/div/div[18]/div[2]/button')
    search_button.click()
    driver.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      相关资源
      最近更新 更多