TradingView 上的“接受 Cookie”

问题描述 投票:0回答:1

我之前在TradingView网站(https://www.tradingview.com/symbols/NASDAQ-TSLA/financials-income-statement/)上创建了一个‘Accept Cookies’的脚本,如下:

wait.until(EC.element_to_be_clickable((By.XPATH,"//span[text()='Accept all']"))).click()

这过去工作得很好。当网页initially加载并且上面的脚本将执行时,将出现“接受Cookies”弹出窗口(页面左下角),当弹出窗口出现并继续我的脚本时,找到并单击“全部接受”按钮,但是最近网站更新了,上面的脚本不再有效,python selenium 无法找到这个元素并点击它。

TradingView 上“接受 Cookies”弹出窗口的更新现在仅在用户手动向下滚动网页(大约向下滚动一半)时出现,因此不能简单地使用

driver.implicitly_wait(5)
功能等待弹出窗口出现和网页完全加载所有元素。

在接受 cookie 之前,我已将此代码

driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
添加到我的脚本中,以手动将网页向下滚动到页面底部以强制显示“接受 Cookie”窗口,它确实如此。但不幸的是,脚本仍然无法点击“全部接受”,所以不确定我在这里遗漏了什么,因为我在检查 HTML 元素时可以清楚地看到这个元素,如下所示将网页滚动到页面底部:

出于好奇,我尝试在不添加开头提到的“接受cookies”脚本的情况下运行主脚本,脚本运行良好,直到窗口弹出一半,然后它会破坏整个脚本的抓取。因此,我需要确保在抓取之前首先删除此窗口。任何帮助将不胜感激。谢谢

我从其他帖子中读到这可能是由于影子 DOM(虽然我对此不太了解),但在检查元素后似乎并非如此,我也尝试使用 CSS 选择器脚本

 driver.find_element(By.CSS_SELECTOR, "acceptAll-WvyPjcpY button-OvB35Th_ size-xsmall-OvB35Th_ color-brand-OvB35Th_ variant-primary-OvB35Th_").click()
而不是 XPath 但这没有用

javascript python selenium-webdriver web-scraping xpath
1个回答
0
投票

这里有一些尝试。这将缓慢滚动并在出现时单击按钮

driver.execute_async_script("""
let interval = setInterval(() => {
  let span = [...document.querySelectorAll('span')].find(span => span.innerText.match("Accept all"))
  if(span){
    span.click()
    clearInterval(interval)
    arguments[0]()
  } else {
    window.scrollTo(0, window.scrollY + 100)
  }
}, 1000)
""")
© www.soinside.com 2019 - 2024. All rights reserved.