【问题标题】:How to choose the right i-frame with webdriver如何使用 webdriver 选择合适的 i-frame
【发布时间】:2019-01-31 16:27:07
【问题描述】:

给大家。 我有下一个网址:“https://www.inipec.gov.it/cerca-pec/-/pecs/companies” 我需要通过 webdriver 单击验证码上的音频按钮图标。 我可以点击验证码框,但无法访问音频按钮。 这是我的代码:

import os, urllib.request, requests, datetime, time, random, ssl, json, codecs, csv, urllib
import os.path
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
from bs4 import BeautifulSoup
from PIL import Image


proxy = "94.79.52.207:8080" # IP:PORT or HOST:PORT
chromedriver = "chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
options.add_argument('disable-infobars')
options.add_argument('--proxy-server=%s' % proxy)
os.environ["webdriver.chrome.driver"] = chromedriver
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(executable_path=chromedriver,       chrome_options=chrome_options)
driver.set_window_size(1050, 740)
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()

driver.switch_to.default_content()
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"#rc-imageselect > div.rc-footer > div.rc-controls > div.primary-controls")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="recaptcha-audio-button"]'))).click()

【问题讨论】:

  • 您在我的回答中尝试过 xPath 吗?
  • 将相关的 HTML 添加到您的问题中。

标签: python selenium captcha


【解决方案1】:

刚刚将 iFrame 更改为 XPath... 像这样:

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,'//iframe[@title="recaptcha challenge"]')))

希望对您有所帮助!

【讨论】:

  • 切换帧的完美方法。
猜你喜欢
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 2017-10-29
  • 2022-10-23
  • 2013-11-06
相关资源
最近更新 更多