如何使用 Selenium 单击 cloudflare 的“验证您是人类”复选框挑战

2023-12-10

我需要使用 Python 自动下载此网页中的 .csv 文件:

https://pace.coe.int/en/aplist/committees/9/commission-des-questions-politiques-et-de-la-democratie

现在,我写了这段代码:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
 
chromedriver_path = r"./driver/chromedriver"
browser = webdriver.Chrome(executable_path=chromedriver_path)
url = "https://pace.coe.int/en/aplist/committees/9/commission-des-questions-politiques-et-de-la-democratie"
topics_xpath = '//*[@id="challenge-stage"]/div/label/span[2]'
browser.get(url)
time.sleep(5)  #Wait a little for page to load.
escolhe = browser.find_element("xpath", topics_xpath)
time.sleep(5)
escolhe.click()
time.sleep(5)

网页打开,然后提示我单击“验证您是人类”:

enter image description here

我已经“检查”了按钮并复制了 xpath(参见上面的代码)。 但我收到这个错误:

NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="challenge-stage"]/div/label/span[2]"}
  (Session info: chrome=114.0.5735.198)

有人可以帮我吗?


The checkbox与文本相关的验证你是人类元素在一个<iframe>所以你必须:

  • Induce WebDriver等待为了想要的框架可用并切换到它.

  • Induce WebDriver等待为了想要的元素可点击.

  • 您可以使用以下任一方法定位策略:

    • Using CSS_选择器:

      driver.get("https://pace.coe.int/en/aplist/committees/9/commission-des-questions-politiques-et-de-la-democratie")
      time.sleep(5)
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[title='Widget containing a Cloudflare security challenge']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label.ctp-checkbox-label"))).click()
      
    • Using XPATH:

      driver.get("https://pace.coe.int/en/aplist/committees/9/commission-des-questions-politiques-et-de-la-democratie")
      time.sleep(5)
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@title='Widget containing a Cloudflare security challenge']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@class='ctp-checkbox-label']"))).click()
      
  • Note:您必须添加以下导入:

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

参考

您可以在以下位置找到一些相关讨论:

  • 通过 Selenium 和 python 切换到 iframe
  • selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:尝试使用 selenium 单击“下一步”按钮时无法找到元素
  • python 中的selenium:NoSuchElementException:消息:没有这样的元素:无法找到元素
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Selenium 单击 cloudflare 的“验证您是人类”复选框挑战 的相关文章

随机推荐

  • Arrays.asList().contains() 给出错误的结果

    Code private static final int GOOGLE DIRECTION ID FOR MATCH 11 12 13 14 15 Log e TAG index Arrays asList GOOGLE DIRECTIO
  • R:如何使用 R 的公式符号来紧凑地生成除选定的二次项子集之外的所有二次项?

    我想要一种紧凑地使用 R 的公式符号 或其他形式 的方法 以包含一组变量 A 到 E 之间的所有二次项 不包括 D E 交互作用 我真正的问题有更长的 A C 类型变量和 D E 类型变量列表 我写了一个小函数来检查我的工作这个帖子 谢谢
  • 比较同一个表中的两个日期范围

    我有一张每家商店的销售额表 如下所示 SQL gt select from sales ID ID STORE DATE TOTAL 1 1 2010 01 01 500 00 2 1 2010 01 02 185 00 3 1 2010
  • 这是什么{! } 在具体的代码行中意味着什么? [复制]

    这个问题在这里已经有答案了 我正在阅读一段代码 它读取 Microsoft Access 数据库架构 在其他人之间 我看到循环中的那行代码 ColName SchemaTable Rows i COLUMN NAME ToString 为什
  • 在 Inno Setup 中检索 .NET 程序集的强名称

    我需要将这些 DLL 文件安装到 GAC 中 我使用预处理器来生成 Files 这些 DLL 的节条目 我需要提供一个值StrongAssemblyName范围 所以问题 可以自动检索吗StrongAssemblyName来自 Pascal
  • $.AjaxFileUpload 在最新版本的 Chrome 版本 83.0.4103.61(官方版本)(64 位)中无法运行

    从最新版本的 Chrome 版本 83 0 4103 61 官方版本 64 位 开始 Jquery AjaxFileUpload 不起作用 如果有人有想法请帮助我 这个 AJAX 调用在旧版本的 chrome 和其他浏览器 如 firefo
  • 导航栏中的下拉菜单

    所以我正在网上学习CSS 发现这段代码有点令人困惑 因为如果我删除 dropbtn 类 输出没有任何变化 为什么它放在 li a 旁边 为什么删除对输出没有影响吗 帮助将不胜感激 谢谢 这是一段代码
  • 快速计算滑动窗口上事件的方法

    假设我有x rnorm 100000 而不是做一个1000长度滑动窗口移动平均线 我想做一个1000计算所有时间的长度滑动窗口x上面是0 2 例如 x lt rnorm 1004 start lt 1 1000 record lt list
  • 服务 JSONP 的最佳内容类型?

    我有一个 web 服务 当调用时不指定回调将返回一个 JSON 字符串application json作为内容类型 当指定回调时 它会将 JSON 字符串包装在回调函数中 因此它不再是真正有效的 JSON 我的问题是 我应该将其作为appl
  • 再次容器内联块

    看这个 我想制作一个主容器 它有 2 个子容器 左 右 各占屏幕宽度的 50 左边必须包含一张照片 右侧必须包含文本 h2 和 p 正下方 文本应该位于图像的中间 我需要它来描述商店中的产品 我正在尝试这个 div border 1px s
  • 为 Gradle 中的所有项目配置存储库

    我正在尝试为所有子项目配置存储库 我有主要的build gradle buildscript repositories mavenLocal mavenCentral google jcenter dependencies NOTE Do
  • 声明未初始化变量的更好方法

    一些 libc 函数 例如sigemptyset set mut sigset t 获取一个指向变量的指针 将其视为未初始化并初始化它 我最终得到这个代码 let mut newmask std mem uninitialized libc
  • System.Text.Json 和多态代码:不适用于 WebApi 控制器

    随着 NET 7 0 的发布 System Text Json应该支持多态代码 不幸的是 当您需要从控制器的方法返回派生类型的实例时 它似乎无法开箱即用 例如 假设以下模型 public class Base public class De
  • java中的密钥库密码加密

    我需要在调用远程队列之前设置以下变量 System setProperty javax net ssl trustStore C certs trustStore jks System setProperty javax net ssl k
  • 通过 Chrome 扩展程序在 Facebook 上分享

    我想通过 chrome 扩展在 facebook 墙上分享当前打开的选项卡 url 为此 我正在使用https facebook com share php早些时候 它首先给我登录选项 然后是共享框 由于 facebook 已弃用此方法 我
  • 在 Swift 中动画字符串淡入/淡出

    我是编程新手 但在过去的两个月里 我在 iOS 版 Swift 的学习上取得了长足的进步 我正在制作一个简单的打字游戏 我构建项目的方式是我有一个隐藏的UITextView检测玩家按下的字符 然后将该字符串与可见的字符串相匹配UITextV
  • 使用 chdir() 从终端更改目录

    我在用chdir 将目录更改为作为参数传递给该函数的值 我明白当我使用运行我的C程序时gcc myCd c and a out 这会将目录更改为 C 程序 内 的父目录 即为 a out 进程生成一个子进程 并且目录的更改发生在该子进程内
  • 什么是堆栈溢出错误?

    什么是StackOverflowError 是什么原因造成的 应该如何处理 参数和局部变量分配在stack 对于引用类型 对象位于heap堆栈中的变量引用堆上的该对象 堆栈通常位于upper地址空间的末尾 当它用完时 它会流向bottom地
  • Flutter Web - 获取 Firestore 集合

    我有一个 flutter 移动应用程序 效果非常好 但是当尝试将相同的代码迁移到 flutter web 时 我无法使用 就像 StreamBuilder 不想在 Web 模式下工作 而只适用于移动应用程序模式 在 dart 文件的顶部 我
  • 如何使用 Selenium 单击 cloudflare 的“验证您是人类”复选框挑战

    我需要使用 Python 自动下载此网页中的 csv 文件 https pace coe int en aplist committees 9 commission des questions politiques et de la dem