scrapy Selenium无法定位元素

ej83mcc0  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(271)

我正在尝试从https://in.puma.com/in/en/mens/mens-new-arrivals中抓取数据。单击显示全部按钮时,将加载完整的数据。
我使用selenium生成点击并加载页面的其余部分,但是,我得到了一个错误

"TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: "

请参阅下面的代码。

from selenium.webdriver.support import expected_conditions as EC
import time
from lxml import etree as et

chrome_driver_path = "driver/chromedriver"

url = 'https://in.puma.com/in/en/mens/mens-new-arrivals'
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.get(url)

x_path_to_load_more = '//*[@data-component-id="a_tspn9cqoeth"]'
browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
button_locate = wait(browser,10).until(EC.presence_of_element_located((By.XPATH,x_path_to_load_more)))
button_locate.click()
o2gm4chl

o2gm4chl1#

xpath不正确,请尝试

x_path_to_load_more = "//button[contains(., 'Show All')]"

要验证xpath检查页面的有效性,请使用Command + F或Control + F打开查找栏,然后粘贴您的xpath

b09cbbtk

b09cbbtk2#

@data-component-id似乎是动态的。这意味着每次打开该页面时,该值都是不同的(而不是"a_tspn9cqoeth")。请尝试使用其他属性值进行搜索:

x_path_to_load_more = '//div[@class="text-center"]/button[contains(@class, "show-more-button")]'

x_path_to_load_all = '//div[@class="text-center"]/button[contains(@class, "show-all-button")]'

此外,最好使用EC.element_to_be_clickable,而不是EC.presence_of_element_located

更新

由于点击按钮可能会被Cookie页脚拦截,请尝试在点击前向下滚动页面:

from selenium.webdriver.common.keys import Keys
driver.find_element('xpath', '//body').send_keys(Keys.END)

相关问题