我正在try 使用Selify和Python网络抓取来根据我当地的公共交通时间表来 Select 路由的下拉选项.以下是指向该站点的链接:https://tmweb.pacebus.com/TMWebWatch/LiveDepartureTimes

我遇到的问题是,这句话:

find_route_takin = driver.find_element(By.CLASS_NAME,"active-result") 

生成一个错误,内容为:

消息:无此类元素:找不到元素:{"方法":"css Select 器"," Select 器":".active-Result"}

以下是我如何try 完成任务的代码:

import time

from bs4 import BeautifulSoup
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import Select

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
driver.get("https://tmweb.pacebus.com/TMWebWatch/LiveDepartureTimes")

driver.find_element(By.ID, "MainContent_routeList_chosen")

find_route_takin = driver.find_element(By.CLASS_NAME,"active-result")
select_route = Select(find_route_takin)
select_route.select_by_visible_text("565 - Grand Avenue")
time.sleep(20)

在用于路由的第一个下拉列表的站点的HTML中,有一个ul对象,其中包含代表每条路由的li个对象.我试着浏览了各种YouTube视频,但找不到解决问题的办法.我读到过,也许我将不得不使用XPath而不是CLASS_NAME,但是当我try 通过右键单击并 Select Copy XPath来复制XPath时,仍然会得到相同的错误消息提示.我想要的是,当我运行程序时,会出现一个 chromium 色窗口,并 Select 了565-Grand Avenue路由.我遇到的错误是

消息:无此类元素:找不到元素:{"方法":"css Select 器"," Select 器":".active-Result"}

推荐答案

您可以try 这种方式:

import time
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import selenium.webdriver.support.expected_conditions as EC

options = ChromeOptions()
options.add_argument("--start-maximized")

driver = Chrome(options=options)

def choose_route(opt):

    driver.get("https://tmweb.pacebus.com/TMWebWatch/LiveDepartureTimes")
    WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'MainContent_routeList_chosen'))).click()

    routes = driver.find_element(By.CSS_SELECTOR, 'ul.chosen-results')
    route_options = routes.find_elements(By.TAG_NAME, 'li')

    for option in route_options:
        if option.text == opt:
            option.click()

    time.sleep(10)

choose_route("565 - Grand Avenue")
# choose_route("213 - Green Bay Road")

注意事项:

  1. 首先,我们等待Route下拉菜单在页面上明显地定位/加载,以便点击它.
  2. 当我们点击时,下拉菜单打开,所有选项都加载到页面上.因此,我们找到了所有路径选项,它们都是类名为chosen-resultsul标签下的所有li个标签
  3. 最后根据文本 Select 选项并点击.

仅此而已,请注意,我们不能使用Select,因为下拉选项不在select标记下.

Python相关问答推荐

正在设置字段.需要为假,因为错误列表索引必须是整数或切片,而不是字符串

如何从维基百科的摘要部分/链接列表中抓取链接?

两极:滚动组,起始指数由不同列设置

隐藏QComboBox的指示器(qdarkstyle)

取相框中一列的第二位数字

FastAPI:使用APIRouter路由子模块功能

如何将新的SQL服务器功能映射到SQL Alchemy的ORM

Python plt.text中重叠,包adjust_text不起作用,如何修复?

如何根据条件在多指标框架上进行groupby

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

如何在Windows上用Python提取名称中带有逗号的文件?

如何从具有不同len的列表字典中创建摘要表?

创建可序列化数据模型的最佳方法

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

Pandas Loc Select 到NaN和值列表

不允许访问非IPM文件夹

用砂箱开发Web统计分析

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

通过ManyToMany字段与Through在Django Admin中过滤

处理具有多个独立头的CSV文件