我需要一些帮助。有URL:https : //www.inipec.gov.it/cercapec/-/pecs/companies。我需要单击复选框验证码:在此处输入图片说明
我的代码如下所示:
import os, urllib.request, requests, datetime, time, random, ssl, json, codecs, csv, urllib from urllib.request import Request, urlopen from urllib.request import urlretrieve from datetime import datetime from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import NoAlertPresentException from selenium.webdriver.chrome.options import Options chromedriver = "chromedriver" os.environ["webdriver.chrome.driver"] = chromedriver chrome_options = webdriver.ChromeOptions() driver = webdriver.Chrome(executable_path=chromedriver, chrome_options=chrome_options) driver.get("https://www.inipec.gov.it/cerca-pec/-/pecs/companies") driver.switch_to_default_content() element = driver.find_elements_by_css_selector('iframe')[1] driver.switch_to_frame(element) driver.find_elements_by_xpath('//*[@id="recaptcha-anchor"]/div[1]').click()
During the execution, there is an error:
driver.find_elements_by_xpath(‘//*[@id=”recaptcha- anchor”]/div1’).click() AttributeError: ‘list’ object has no attribute ‘click’
Please, help to fix it.
使用以下二进制文件集:
您可以使用以下更新的代码块作为解决方案:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe') driver.get("https://www.inipec.gov.it/cerca-pec/-/pecs/companies") WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name^='a-'][src^='https://www.google.com/recaptcha/api2/anchor?']"))) WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[@id='recaptcha-anchor']"))).click()
在https://www.inipec.gov.it/cerca-pec/-/pecs/companies要在reCAPTCHA复选框上 调用的URL中,您需要:click()
诱导WebDriverWait获得所需的帧并切换到该帧。 诱导WebDriverWait使所需的元素可单击。 您可以使用以下解决方案:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.chrome.options import Options options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_argument('disable-infobars') driver = webdriver.Chrome(executable_path=r'C:\WebDrivers\chromedriver.exe', chrome_options=options) driver.get("https://www.inipec.gov.it/cerca-pec/-/pecs/companies") WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name^='a-'][src^='https://www.google.com/recaptcha/api2/anchor?']"))) WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox']/div[@class='recaptcha-checkbox-checkmark']"))).click()