【问题标题】:Selenium does NOT do anything after getting rid of GDPR consent摆脱 GDPR 同意后,Selenium 不会做任何事情
【发布时间】:2021-04-16 21:53:18
【问题描述】:

这是我第一次使用 Selenium 和网页抓取。我一直被烦人的 GDPR iframe 困扰。我只是想去一个网站,在搜索栏中搜索一些东西,然后单击其中一个结果。但在我取消 GDPR 同意后,它似乎没有任何作用。

重要的是,它不会给出任何错误。

这是我非常简单的代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

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

import time

#Web driver
driver = webdriver.Chrome(executable_path="C:\Program Files (x86)\chromedriver.exe")

driver.get("https://transfermarkt.co.uk/")

search = driver.find_element_by_name("query")
search.send_keys("Sevilla FC")
search.send_keys(Keys.RETURN)

WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.ID, "sp_message_iframe_382445")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='ACCEPT ALL']"))).click()

try:
    sevfclink = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "368")))
    sevfclink.click()
except:
    driver.quit()

time.sleep(5)

driver.quit()

【问题讨论】:

  • 这就是你的全部代码吗?它在哪条线上失败了?我假设如果你让它静置 10 秒以上,它最终会超时并给你一个错误,但你说你没有收到任何错误。 ID 为 368,这似乎不是一个稳定的定位器。我会找到另一种方法来定位任何元素。
  • 您永远不会将驱动程序从 iframe 中切换出来。这是设计使然吗?

标签: python selenium web-scraping iframe


【解决方案1】:

不确定从哪里获得 iframe,但 id 可能是动态的,所以试试这个。

driver.get("https://transfermarkt.co.uk/")
wait = WebDriverWait(driver,10)
search = wait.until(EC.element_to_be_clickable((By.NAME, "query")))
search.send_keys("Sevilla FC", Keys.RETURN)

wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[id^='sp_message_iframe']")))
wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='ACCEPT ALL']"))).click()
driver.switch_to.default_content()
try:
    sevfclink = wait.until(EC.element_to_be_clickable((By.ID, "368")))
    sevfclink.click()
except:
    pass

【讨论】:

  • 这很好用!我需要研究你的代码......我还没有遇到一些事情。非常感谢!
【解决方案2】:

看起来以 WebDriverWait 开头的两行会引发错误。如果我跳过这些到 try 语句,您将获得搜索结果。出现了一个概述塞维利亚足球俱乐部的页面。我认为 WebDriverWait 行是为了确保您等待某些东西,但据我所知,它们是不必要的。

【讨论】:

    猜你喜欢
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    相关资源
    最近更新 更多