python - Python Selenium 无法选择搜索栏
问题描述
我正在尝试使用 selenium 在https://catalog.swarthmore.edu/上搜索课程并抓取结果。我尝试使用的所有选择器都失败了,当我将它们打印出来时,它们返回空数组。为什么这些选择器会失败,正确的选择器是什么?我通过悬停并单击带有 chrome SelectorGadget扩展名的搜索字段获得“#keyword”和“span input”,并通过检查获得“span.show.clearfix input”和“.show.clearfix input”带有 Chrome 开发工具的 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")#enter 您的搜索。AttributeError:“list”对象没有属性“send_keys”
解决方案
该页面有多个 id=keyword 元素,因此结果是一个列表。要发送密钥,请从列表中选择第一个元素:
试试这个代码:
search = css('keyword')[0] #("span.show.clearfix input")#css("#keyword")#get search field
您可能应该更改函数的名称,css
因为它实际上是按元素 id 搜索的。
推荐阅读
- javascript - 如何将脚本标签嵌入到 Angular 组件中
- javascript - 当计时器达到两位数时,localStorage 中断
- node.js - 将 NestJS 部署到 Azure DevOps:错误:找不到模块“../commands”
- java - 如何将文件和正文添加到 MockMvc?
- sql - PostgreSQL在查询中检查父级的父级
- sql-server - T-SQL 多重重复检查
- python-3.x - 我不允许在其他电脑上运行 python 可执行文件
- python - Python - 创建元组矩阵
- c# - 自定义字体在 xamrain 表单中未按预期工作
- laravel - 有没有办法避免使用 Laravel Passport 将用户重定向到 Laravel 后端登录页面?