2015-05-07 3 views
1

Я узнал, что в какой-то момент вам нужно использовать webtoolkits, например, selenium для автоматизации скребков.Как использовать селен вместе со скрипом для автоматизации процесса?

Как я могу щелкнуть следующую кнопку в Google Play Store, чтобы очистить отзывы только для моей цели колледжа!

import scrapy 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.selector import Selector 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from urlparse import urljoin 
from selenium import webdriver 
import time 


class Product(scrapy.Item): 
    title = scrapy.Field() 


class FooSpider(CrawlSpider): 
    name = 'foo' 

    start_urls = ["https://play.google.com/store/apps/details?id=com.gaana&hl=en"] 

    def __init__(self, *args, **kwargs): 
     super(FooSpider, self).__init__(*args, **kwargs) 
     self.download_delay = 0.25 
     self.browser = webdriver.Chrome(executable_path="C:\chrm\chromedriver.exe") 
     self.browser.implicitly_wait(60) # 

    def parse(self,response): 
     self.browser.get(response.url) 
     sites = response.xpath('//div[@class="single-review"]/div[@class="review-header"]') 
     items = [] 
     for i in range(0,200): 
      time.sleep(20) 
      button = self.browser.find_element_by_xpath("/html/body/div[4]/div[6]/div[1]/div[2]/div[2]/div[1]/div[2]/button[1]/div[2]/div/div") 
      button.click() 
      self.browser.implicitly_wait(30)  
      for site in sites: 
       item = Product() 

       item['title'] = site.xpath('.//div[@class="review-info"]/span[@class="author-name"]/a/text()').extract() 
       yield item 

Я обновил свой код, и это только дает мне repeative 40 пунктов снова и again.whats неправильно с моей цикл?

кажется, что исходный код, который обновляется не передается в XPATH вот почему она возвращается с теми же 40 пунктов

ответ

3

Я хотел бы сделать что-то вроде этого:

from scrapy import CrawlSpider 
from selenium import webdriver 
import time 

class FooSpider(CrawlSpider): 
    name = 'foo' 
    allow_domains = 'foo.com' 
    start_urls = ['foo.com'] 

    def __init__(self, *args, **kwargs): 
     super(FooSpider, self).__init__(*args, **kwargs) 
     self.download_delay = 0.25 
     self.browser = webdriver.Firefox() 
     self.browser.implicitly_wait(60) 

    def parse_foo(self.response): 
     self.browser.get(response.url) # load response to the browser 
     button = self.browser.find_element_by_xpath("path") # find 
     # the element to click to 
     button.click() # click 
     time.sleep(1) # wait until the page is fully loaded 
     source = self.browser.page_source # get source of the loaded page 
     sel = Selector(text=source) # create a Selector object 
     data = sel.xpath('path/to/the/data') # select data 
     ... 

Однако лучше не ждать определенного количества времени. Поэтому вместо time.sleep(1) вы можете использовать один из способов, описанных здесь http://www.obeythetestinggoat.com/how-to-get-selenium-to-wait-for-page-load-after-a-click.html.

+3

Он по-прежнему не загружает URL-адрес браузера –

+1

браузер открыт, но в него не вводится url –

+0

Попробуйте 'webdriver.Chrome()' вместо 'webdriver.Firefox()'. Firefox тоже не работал в моем случае. – Timofey

Смежные вопросы