得到回应但一无所获!
import scrapy
from scrapy.selector import Selector
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
class ProductSpider(scrapy.Spider):
name = "card"
start_urls = ['https://examplesite.com']
def __init__(self):
self.driver = webdriver.Chrome()
def parse(self, response):
self.driver.get(response.url)
actions = ActionChains(self.driver)
while True:
next = self.driver.find_elements_by_css_selector("button#show-more")
if next:
last_height = self.driver.execute_script("return document.body.scrollHeight")
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
actions.move_to_element(next[0]).click().perform()
lists= Selector(text=self.driver.page_source)
for list in lists.xpath('//ul[@id="finder-table"]/li'):
yield{
'Name': list.xpath('.//*[@class="table-item-heading-product-name"]/span/strong/text()').get(),
'Title': list.xpath('.//*[@class="table-item-heading-product-name"]/span/text()').get()
}
else:
break
self.driver.close()
1条答案
按热度按时间0s7z1bwu1#
我猜你需要滚动到“显示更多”按钮,然后再点击它,因为它不是在屏幕的可视区域,直到你向下滚动屏幕。
此外,最好根据类名而不是文本来定位元素。
同样,如果没有更多的“显示更多”按钮,你的代码将抛出异常。所以我用
find_elements
代替你写的来获取元素列表。这不会抛出异常。如果没有找到元素,它将返回一个空列表,你的代码将正常退出。如果找到元素,你将使用返回列表中的第一个元素。这就是我最后重新构建你的代码: