【问题标题】:Python Selenium fails to select search barPython Selenium 无法选择搜索栏
【发布时间】:2021-01-04 22:54:00
【问题描述】:

我正在尝试使用 selenium 在 https://catalog.swarthmore.edu/ 上搜索课程并抓取结果。我尝试使用的所有选择器都失败了,当我将它们打印出来时,它们返回空数组。为什么这些选择器会失败,正确的选择器是什么?我通过悬停并单击带有 chrome SelectorGadget 扩展名的搜索字段获得“#keyword”和“span input”,并从使用 Chrome Devtools 检查 HTML。

#import scrapy
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import json

browserOptions = Options()
browserOptions.add_argument('--headless')
driver = webdriver.Chrome('C:/WebDriver/bin/chromedriver.exe', options=browserOptions)

def css(selector):
    return driver.find_elements_by_id(selector)

driver.get("https://catalog.swarthmore.edu/")
print(driver.title)
search = css("span.show.clearfix input")#css("#keyword")#get search field
print(search)
print(css("span input"))
print(css(".show.clearfix input"))
print(css("#keyword"))

search.send_keys("ANCH 028")#enter your search.
search.submit()
search.clear()#clear search field
driver.quit()

错误信息: 回溯(最近一次通话最后): 文件“getDescWJSON.py”,第 31 行,在 search.send_keys("ANCH 028")#输入你的搜索。 AttributeError: 'list' 对象没有属性 'send_keys'

【问题讨论】:

  • 您好,请问是什么问题?

标签: python html css selenium selenium-webdriver


【解决方案1】:

这对我有用:-

driver.get('https://catalog.swarthmore.edu/')
btn = driver.find_element_by_xpath('''/html/body/table/tbody/tr[3]/td[1]/table/tbody/tr[2]/td[2]/table/tbody/tr[1]/td/form/fieldset/span[3]/input[1]''')
btn.click() #you have to click it first
btn.send_keys("ANCH 028")

【讨论】:

    【解决方案2】:

    您可以简单地执行此操作以将键发送到该元素。在页面加载后等待元素出现并将键发送给元素。

    search=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//input[@id='keyword']"))).send_keys("ANCH 028")
    

    导入

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait 
    from selenium.webdriver.support import expected_conditions as EC
    

    【讨论】:

      【解决方案3】:

      该页面有多个 id=keyword 的元素,因此结果是一个列表。要发送密钥,请从列表中选择第一个元素:

      试试这个代码:

      search = css('keyword')[0]  #("span.show.clearfix input")#css("#keyword")#get search field
      

      您可能应该更改函数 css 的名称,因为它实际上是按元素 id 搜索的。

      【讨论】:

        猜你喜欢
        • 2020-12-15
        • 2016-12-19
        • 2021-12-06
        • 1970-01-01
        • 1970-01-01
        • 2017-09-05
        • 2021-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多