如何使用 Selenium 和 Python 通过爬虫测试非标准下拉列表

2024-02-15

我正在参与一个大学项目,构建一个网页爬虫。 现在我遇到了在网页中测试下拉列表的情况。 具体来说,以下页面不使用标准的“下拉”类。

https://www.mirrorfiction.com/zh-Hant/book/406

我很难实施决策程序来判断网页中是否有下拉菜单以及下拉菜单是否已被下拉。

程序员似乎使用一个名为 btnGa 的类或类似的东西。 我无法用谷歌搜索。
我不知道浏览器如何知道下拉标签。
html 源太大。 所以我只复制了下面的一小部分。
html 源包含 navlist 类的 ul。 然后这个ul中的li标签包含另一个ul,它实际上是悬停时的下拉列表。
但我真的不明白浏览器如何知道这是一个下拉列表。 因此我不知道如何编写测试用例来单击此下拉列表中的按钮。

任何人都可以帮我识别下拉列表并单击下拉列表项吗?

HTML:

<ul class="navList">
    <li class="mobileDisable">
        <a data-ga-label="小說" data-ga-action="click" data-ga-category="header" onclick="app.navLiClick(this)" class="hasSub btnGa open" href="https://www.mirrorfiction.com/zh-Hant/list/novel">
            <span class="text novel">小說</span>
        </a>
        <ul>
            <li>
                <a data-ga-label="小說-仙俠" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/11">
                        <span class="text">仙俠</span>
                        <span class="num">/ 16</span>
                    </a>
                </li>
                <li>
                    <a data-ga-label="小說-玄幻" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/9">
                        <span class="text">玄幻</span>
                        <span class="num">/ 24</span>
                    </a>
                </li>
                <li>
                    <a data-ga-label="小說-奇幻" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/29">
                        <span class="text">奇幻</span>
                        <span class="num">/ 56</span>
                     </a>
                                </li>
                                                            <li>
                     <a data-ga-label="小說-武俠" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/10">
                         <span class="text">武俠</span>
                         <span class="num">/ 11</span>
                      </a>
                  </li>
                                                            <li>
                  <a data-ga-label="小說-科幻" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/8">
                       <span class="text">科幻</span>
                       <span class="num">/ 17</span>
                  </a>
              </li>
                                                            <li>
              <a data-ga-label="小說-恐怖" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/30">
                       <span class="text">恐怖</span>
                       <span class="num">/ 11</span>
              </a>
            </li>
                                                            <li>
           <a data-ga-label="小說-校園" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/7">
                  <span class="text">校園</span>
                  <span class="num">/ 16</span>
                </a>
            </li>
                                                            <li>
            <a data-ga-label="小說-愛情" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/1">
                  <span class="text">愛情</span>
                  <span class="num">/ 78</span>
               </a>
            </li>
                                                            <li>
            <a data-ga-label="小說-寫實" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/5">
                  <span class="text">寫實</span>
                  <span class="num">/ 48</span>
                </a>
            </li>
                                                            <li>
                                    <a data-ga-label="小說-歷史" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/6">
                                        <span class="text">歷史</span>
                                        <span class="num">/ 13</span>
                                    </a>
                                </li>
                                                            <li>
                                    <a data-ga-label="小說-驚悚" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/31">
                                        <span class="text">驚悚</span>
                                        <span class="num">/ 24</span>
                                    </a>
                                </li>
                                                            <li>
                                    <a data-ga-label="小說-其它" data-ga-action="click" data-ga-category="header" class="btnGa" href="https://www.mirrorfiction.com/zh-Hant/list/novel/classification/12">
                                        <span class="text">其它</span>
                                        <span class="num">/ 40</span>
                                    </a>
                                </li>
                                                    </ul>
                    </li>

考虑按照以下步骤和代码行打开 URL 并单击菜单:

  • 通过 pip 安装当前版本的 selenium
  • 下载最新的 chromedriver.exe 并在脚本中提供绝对路径
  • 代码块:

    from selenium import webdriver
    driver=webdriver.Chrome("C:\\Utility\\your_directory\\chromedriver.exe")
    #maximize the browser window
    driver.maximize_window()
    #open the url in the browser
    driver.get("https://www.mirrorfiction.com/zh-Hant/book/406")
    #click on the first menu item 小說
    driver.find_element_by_xpath("//nav[@id='nav']/div/ul/li/a/span[@class='text novel']").click()
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Selenium 和 Python 通过爬虫测试非标准下拉列表 的相关文章

  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 如何在 Python 中解析和比较 ISO 8601 持续时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Python v2 库 它允许我解析和比较 ISO 8601 持续时间may处于不同单
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • 在 Sphinx 文档中*仅*显示文档字符串?

    Sphinx有一个功能叫做automethod从方法的文档字符串中提取文档并将其嵌入到文档中 但它不仅嵌入了文档字符串 还嵌入了方法签名 名称 参数 我如何嵌入only文档字符串 不包括方法签名 ref http www sphinx do
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • 使用 TestNG 运行并行测试时捕获 WebDriver 屏幕截图

    我目前正在通过分别重写 TestListenerAdapter 方法 onTestFailure 和 onTestSuccess 来捕获 TestNG 中失败和成功的屏幕截图 为此 您需要指定要截取屏幕截图的驱动程序 我的问题 在方法级别并
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk

随机推荐

  • 图论中的盒子堆叠

    请帮我找到解决这个问题的好方法 我们有 n 个 3 维的盒子 我们可以调整它们的方向 并且希望将它们放在另一个之上以获得最大高度 如果两个尺寸 宽度和长度 小于下面盒子的尺寸 我们可以将一个盒子放在另一个盒子的顶部 例如 我们有 3 个维度
  • 如何强制 ListBox 重新加载 ListBoxItems 的属性

    有什么方法可以强制 ObservableCollection 触发 CollectionChanged 吗 我有一个 ObservableCollection 对象ListBox项目源 因此每次我向集合中添加 删除项目时 ListBox 都
  • ListFragment 相对于 ListView 或普通 Fragment 的优势

    我有一个活动 其中左侧的项目菜单是文本视图 当用户选择其中一个 textView 时 它会将一个 listView 放置在占据屏幕另外 2 3 的 Activity 的其余区域中 当用户触摸页面左侧菜单上的不同 textView 时 它将打
  • 为什么重载方法中enum参数不能接受int值(>0)

    这是我的代码 public class Program public enum SexEnum Male Female public static void Test SexEnum s Console WriteLine enum pub
  • 匹配两张图片之间的颜色主导的最佳策略是什么?

    我需要匹配两张不同图片之间的主色 使它们尽可能相似 例如 我想将下面孩子的灰度图片与士兵的棕褐色图片相匹配 并补偿对比度和闪电 到目前为止 我正在考虑将图片转换为YCrCb 并匹配Y通道直方图上的对比度和其他通道中的颜色 我也必须在彩色图片
  • 如何使用 setuptools/distutils 包含包数据?

    使用 setuptools 时 我无法让安装程序拉入任何内容package data https pythonhosted org setuptools setuptools html including data files文件 我读过的
  • 我应该检查 WebClient.UploadFile 的响应来了解上传是否成功吗?

    我以前从未使用过WebClient 我不确定是否应该检查服务器的响应以了解上传是否成功 或者如果没有异常我是否可以让文件上传 如果我应该检查回复 我该怎么做 解析 resposeHeaders 属性 提前致谢 The UploadFile方
  • 如何获得C语言中经过的时间(以毫秒为单位)? (视窗)

    我在网上搜索过 但只找到了一种方法 但通过这种方式 它会在几秒而不是毫秒内返回 我的代码是 include
  • 如何检测我的进程是否正在运行 UAC 提升的进程?

    我的 Vista 应用程序需要知道用户是否以 管理员 身份 提升权限 或标准用户 非提升权限 启动它 我如何在运行时检测到这一点 对于我们这些使用 C 工作的人来说 在 Windows SDK 中 有一个 UACDemo 应用程序作为 跨技
  • 自定义条形图不同的工具提示

    我现在尝试通过 Chart js 绘制条形图 结果为 图1 and 图2 我知道它可以使用tooltipTemplate Files 自定义工具提示 但是可以在不同的栏中显示不同的文本吗 例如 显示12 10 13 20而不是工具提示12
  • 如何将非托管应用程序窗口置于前面,并使其成为(模拟)用户输入的活动窗口

    我假设我需要使用 pinvoke 但我不确定需要哪些函数调用 场景 一个遗留应用程序将运行 我将拥有该应用程序的句柄 我需要 将该应用程序置于顶部 在所有其他窗口的前面 使其成为活动窗口 需要调用哪些 Windows 函数 如果您没有窗口句
  • 使用 MySQL 检索按小时分组的行

    我有一个包含访问日志的表 我想知道一天 24 小时内每小时发生了多少次对 resource id 123 的访问 我检索此信息的第一个想法就是每小时循环一次 并在每个循环中查询表 例如 and time like hour 鉴于time字段
  • Android:按文件名播放/res/raw中的音频文件

    在我的应用程序的 res raw 文件夹中 我有 file1 ogg file2 ogg fileN ogg 在本地数据库中 我有对文件名的引用 即file1 file2 fileN 给定这些字符串之一 说fileM 我怎样才能播放其中包含
  • 在 html_table(rvest) 中指定列类

    我正在使用 rvest 中的 html table 从下面的网站读取两列索引表 两列都包含我想要保留的前导零的实例 因此 我希望这些专栏具有阶级特征 我使用以下代码 library rvest library data table df l
  • C# 和 C++ 之间的进程间通信

    我正在为游戏编写一个机器人 它具有 C API 接口 即 当事件发生时 游戏会调用 Cpp dll 中的方法 该 dll 可以回调游戏中的方法来触发操作 我真的不想用 C 编写我的机器人 我是一个相当有经验的 C 程序员 但我根本没有 C
  • 编码时需要考虑哪些安全问题?

    我知道 SQL 注入是其中之一 其他是什么 OWASP org 保留了一个列表 从OWASP 前十名 http www owasp org index php Category OWASP Top Ten Project
  • PHP 分页与 MySQLi

    我正在构建自己的 CMS 我制作了一个管理系统 我可以用它在数据库中插入帖子 显示帖子不是问题 但我不知道如何进行分页 这是我的查询 SELECT FROM posts WHERE status draft 构建您的查询以获得LIMIT 结
  • 如何使用 xsom\dom\jaxb 获取 xsd 的最大深度?

    如何使用 xsom 获取 xsd 的最大深度 例如 xsd 的每个复杂类型下的元素总数 另外 如果该复杂类型下存在复杂类型 则该复杂类型下的元素 属性的数量 使用 dom xsom jaxb
  • 对c中的int数组进行排序并删除重复项

    我正在学习C 并且谈到了排序的主题 我写了一个comp 功能和使用qsort对数组进行排序int 现在 对于下一个任务 我需要从数组中删除重复项 是否可以同时排序和删除重复项 include
  • 如何使用 Selenium 和 Python 通过爬虫测试非标准下拉列表

    我正在参与一个大学项目 构建一个网页爬虫 现在我遇到了在网页中测试下拉列表的情况 具体来说 以下页面不使用标准的 下拉 类 https www mirrorfiction com zh Hant book 406 我很难实施决策程序来判断网