点击java元素scrapy + selenium
问题描述:
我试图用scrapy和硒刮这个页面:http://www.newyorkerfiction.com/Pieces.aspx。我需要点击不同的页面,但我找不到方法。我的脚本是:点击java元素scrapy + selenium
def __init__(self):
self.driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs')
self.driver.set_window_size(1920, 1080); #Size
def parse(self, response):
self.driver.get(response.url)
element = self.driver.find_element(By.XPATH, '//div[@class="rgWrap rgNumPart"]//a[contains(@href, "javascript:__doPostBack")]')
self.driver.execute_script("arguments[0].click();", element)
self.driver.save_screenshot('screenshot.png')
for sel in response.xpath('//body'):
item = NyfictionItem()
item["title"] = sel.xpath('//td[@class="title"]').extract()
yield item
self.driver.close()
我不明白是什么错,因为我明白,execute_script使硒与javascript中的元素进行交互。我测试了xpath,它看起来是正确的。
任何想法?
感谢
答
的一个问题是,你的定位点在分页栏的所有环节和,因为你得到的第一个,你实际上是试图点击“1”的链接,但是,相反,你打算点击“下一页”链接,该链接可以通过input.rgPageNext
CSS选择器找到。
你,不过,需要wait for it to be visible and clickable,使过程更加可靠:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs')
driver.set_window_size(1920, 1080)
driver.get("http://www.newyorkerfiction.com/Pieces.aspx")
wait = WebDriverWait(driver, 10)
next_link = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.rgPageNext")))
next_link.click()
driver.save_screenshot('screenshot.png')
driver.close()
请注意,您可能虽然需要点击“下一页”后的另一个等待链接,让新的页面结果被加载。
而且,您还需要一些额外的逻辑才能在最后一页停下来。
它的工作!非常感谢。是的,现在我必须加入更多的逻辑。 –