接受 cookie 后,无法找到页面的 "next page" 按钮元素并单击它,也无法在 Python 中找到任何带有 Selenium 的信息
Cannot find "next page" button element of page and click it nor any info with Selenium in Python after accepting cookies
我正在学习如何从网站上抓取数据。我从这个页面开始:https://www.transfermarkt.co.uk/premier-league/torschuetzenliste/wettbewerb/GB1/saison_id/2020
我想从这个页面中提取球员的姓名和进球,并在前几页进行。这是我的
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
作为序言然后
driver = webdriver.Chrome(executable_path=r"C:\bin\chromedriver.exe")
driver.get("https://www.transfermarkt.co.uk/premier-league/torschuetzenliste/wettbewerb/GB1/saison_id/2020")
pageSoup = BeautifulSoup(driver.page_source, 'html.parser')
Players = pageSoup.find_all("a", {"class": "spielprofil_tooltip"})
这正确地提取了我想要的第一页信息。现在点击并转到第二页,我这样做
driver.find_element_by_css_selector('li.naechste-seite').click()
(我必须说我不确定这样做是否正确...但是从我在这里和其他网站上收集的信息来看,它似乎应该可以解决问题。)我收到一个错误,
ElementClickInterceptedException: Message: element click intercepted:
Element ... is
not clickable at point (623, 695). Other element would receive the
click:
这个错误是因为有这个 cookie 弹出窗口(至少在欧洲是这样),如果您不继续浏览该网站,则需要您接受或更改它们)。为了接受所有并继续在网站上,我做了
driver = webdriver.Chrome(executable_path=r"C:\bin\chromedriver.exe")
driver.get("https://www.transfermarkt.co.uk/premier-league/torschuetzenliste/wettbewerb/GB1/saison_id/2020")
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,'//iframe[@id="sp_message_iframe_382444"]')))
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(@title,'ACCEPT ALL')]"))).click()
driver.implicitly_wait(10)
这似乎按预期工作,因为我的浏览器正确地点击了 Cookie 按钮 'accept all',我最终进入了正确的页面。然而奇怪的事情发生了。我无法再访问数据 table。的确,如果我以前喜欢:
pageSoup = BeautifulSoup(driver.page_source, 'html.parser')
Players = pageSoup.find_all("a", {"class": "spielprofil_tooltip"})
玩家人数为空。如果我这样做
driver.find_element_by_css_selector('li.naechste-seite').click()
转到下一页,出现错误
NoSuchElementException: Message: no such element: Unable to locate
element: {"method":"css selector","selector":"li.naechste-seite"}
我不确定我应该做什么。
这是html下一页点击“按钮”感兴趣的部分(不知道大家有没有兴趣)
使用 WebDriverWait()
并等待 element_to_be_clickable()
和后面的 css 选择器。
在此之前需要跳出iframe
driver.switch_to.default_content()
然后使用
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"li.naechste-seite>a"))).click()
您的整个代码将是
driver = webdriver.Chrome(executable_path=r"C:\bin\chromedriver.exe")
driver.get("https://www.transfermarkt.co.uk/premier-league/torschuetzenliste/wettbewerb/GB1/saison_id/2020")
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,'//iframe[@id="sp_message_iframe_382444"]')))
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(@title,'ACCEPT ALL')]"))).click()
#Jump out from iframe
driver.switch_to.default_content()
#click on next button
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"li.naechste-seite>a"))).click()
我正在学习如何从网站上抓取数据。我从这个页面开始:https://www.transfermarkt.co.uk/premier-league/torschuetzenliste/wettbewerb/GB1/saison_id/2020
我想从这个页面中提取球员的姓名和进球,并在前几页进行。这是我的
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
作为序言然后
driver = webdriver.Chrome(executable_path=r"C:\bin\chromedriver.exe")
driver.get("https://www.transfermarkt.co.uk/premier-league/torschuetzenliste/wettbewerb/GB1/saison_id/2020")
pageSoup = BeautifulSoup(driver.page_source, 'html.parser')
Players = pageSoup.find_all("a", {"class": "spielprofil_tooltip"})
这正确地提取了我想要的第一页信息。现在点击并转到第二页,我这样做
driver.find_element_by_css_selector('li.naechste-seite').click()
(我必须说我不确定这样做是否正确...但是从我在这里和其他网站上收集的信息来看,它似乎应该可以解决问题。)我收到一个错误,
ElementClickInterceptedException: Message: element click intercepted: Element ... is not clickable at point (623, 695). Other element would receive the click:
这个错误是因为有这个 cookie 弹出窗口(至少在欧洲是这样),如果您不继续浏览该网站,则需要您接受或更改它们)。为了接受所有并继续在网站上,我做了
driver = webdriver.Chrome(executable_path=r"C:\bin\chromedriver.exe")
driver.get("https://www.transfermarkt.co.uk/premier-league/torschuetzenliste/wettbewerb/GB1/saison_id/2020")
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,'//iframe[@id="sp_message_iframe_382444"]')))
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(@title,'ACCEPT ALL')]"))).click()
driver.implicitly_wait(10)
这似乎按预期工作,因为我的浏览器正确地点击了 Cookie 按钮 'accept all',我最终进入了正确的页面。然而奇怪的事情发生了。我无法再访问数据 table。的确,如果我以前喜欢:
pageSoup = BeautifulSoup(driver.page_source, 'html.parser')
Players = pageSoup.find_all("a", {"class": "spielprofil_tooltip"})
玩家人数为空。如果我这样做
driver.find_element_by_css_selector('li.naechste-seite').click()
转到下一页,出现错误
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"li.naechste-seite"}
我不确定我应该做什么。
这是html下一页点击“按钮”感兴趣的部分(不知道大家有没有兴趣)
使用 WebDriverWait()
并等待 element_to_be_clickable()
和后面的 css 选择器。
在此之前需要跳出iframe
driver.switch_to.default_content()
然后使用
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"li.naechste-seite>a"))).click()
您的整个代码将是
driver = webdriver.Chrome(executable_path=r"C:\bin\chromedriver.exe")
driver.get("https://www.transfermarkt.co.uk/premier-league/torschuetzenliste/wettbewerb/GB1/saison_id/2020")
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,'//iframe[@id="sp_message_iframe_382444"]')))
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(@title,'ACCEPT ALL')]"))).click()
#Jump out from iframe
driver.switch_to.default_content()
#click on next button
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"li.naechste-seite>a"))).click()