我正在尝试抓取一个动态网站,我需要 Selenium。
只有当我点击该特定元素时,我想要抓取的链接才会打开。它们是由 jQuery 打开的,所以我唯一的选择是单击它们,因为没有 href 属性或任何可以给我 URL 的东西。
我的方法是这样的:
# -*- coding: utf-8 -*-
import scrapy
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from scrapy.selector import Selector
from scrapy_selenium import SeleniumRequest
class AnofmSpider(scrapy.Spider):
name = 'anofm'
def start_requests(self):
yield SeleniumRequest(
url='https://www.anofm.ro/lmvw.html?agentie=Covasna&categ=3&subcateg=1',
callback=self.parse
)
def parse(self, response):
driver = response.meta['driver']
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "tableRepeat2"))
)
finally:
html = driver.page_source
response_obj = Selector(text=html)
links = response_obj.xpath("//tbody[@id='tableRepeat2']")
for link in links:
driver.execute_script("arguments[0].click();", link)
yield {
'Ocupatia': response_obj.xpath("//div[@id='print']/p/text()[1]")
}
但它不会工作。
在我要单击该元素的行上,出现此错误:
TypeError: Object of type Selector is not JSON serializable
我有点理解这个错误,但我不知道如何解决它。我不知何故需要将该对象从选择器转换为可点击按钮。
我在网上查了解决方案和文档,但我找不到任何有用的东西。
任何人都可以帮助我更好地理解这个错误,我应该如何解决它?
谢谢。