问题爬行亚马逊,元素无法滚动到视图中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了问题爬行亚马逊,元素无法滚动到视图中相关的知识,希望对你有一定的参考价值。

我在亚马逊上抓取网页时遇到问题。

我尝试过使用:

  • 执行JS脚本
  • 行动链
  • 明确的等待

似乎没什么用。一切都抛出一个例外或错误或另一个。

Base Script

ff = create_webdriver_instance()
ff.get('https://www.amazon.ca/gp/goldbox/ref=gbps_ftr_s-3_4bc8_dct_10-?gb_f_c2xvdC0z=sortOrder:BY_SCORE,discountRanges:10-25%252C25-50%252C50-70%252C70-&pf_rd_p=f5836aee-0969-4c39-9720-4f0cacf64bc8&pf_rd_s=slot-3&pf_rd_t=701&pf_rd_i=gb_main&pf_rd_m=A3DWYIK6Y9EEQB&pf_rd_r=CQ7KBNXT36G95190QJB1&ie=UTF8')
next_button = ff.find_element_by_xpath('(//li/a[contains(text(), "Next")])[1]')

Attempt #1: Executing JS

脚本

ff.execute_script('arguments[0].scrollIntoView()', next_button)

错误

Element could not be scrolled into view

Attempt #2: Action Chain

脚本

actions = ActionChains(ff)
actions.move_to_element(next_button)
actions.click(next_button)
actions.perform()

错误

TypeError: rect is undefined

Attempt #3: Explicit Wait

next_button = WebDriverWait(ff, 60).until(
    EC.visibility_of_element_located((By.XPATH, '(//li/a[contains(text(), "Next")])[1]'))
)

我也尝试过使用element_to_be_clickable。这两个都最终超时。

答案

那是因为你正试图处理隐藏的链接。请尝试以下方式

next_button = ff.find_element_by_partial_link_text('Next')
next_button.click()

要么

next _button = ff.find_element_by_link_text('Next→')

请注意,find_element_by_partial_link_text / find_element_by_link_text仅搜索可见链接。

你可能还需要打电话

ff.implicitly_wait(10)

一次在您的脚本中(在您的WebDriver实例定义之后的某个地方)或使用如下的ExplicitWait

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

next_button = WebDriverWait(ff, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Next→')))

确保即使渲染延迟也能找到所需的元素

以上是关于问题爬行亚马逊,元素无法滚动到视图中的主要内容,如果未能解决你的问题,请参考以下文章

无法解决 MoveTargetOutOfBoundsException 的问题:或无法滚动到 Firefox 上的视图 [重复]

Recyclerview 滚动在嵌套滚动视图中的片段中不起作用

滚动时在另一个片段视频视图中重叠一个片段的视频拇指

消息:尝试通过 Selenium 单击下拉菜单中的选项时,元素 <option> 无法滚动到视图中

在 driver.execute_script() 中使用伪选择器时无法将某些元素滚动到视图中

Android滚动问题