2017-03-31 16 views
2

私はこのページをスクレイプしようとしています: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ジャバスクリプト内の要素と対話するセレンを作ることを理解するので、私が間違っているのか理解していません。私はxpathをテストし、それは正しいようです。

アイデア?

おかげ

答えて

3

一つの問題は、ページネーションバー内のすべてのリンクにそのごロケータポイントであると、あなたが最初のものを取得していることから、あなたは実際には、代わりに、「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() 

注意。

また、最後のページで停止するには、追加のロジックが必要です。

+1

これは機能しました。どうもありがとう。はい、今私はもっと論理を入れなければなりません。 –

関連する問題