Как использовать селен вместе со скрипом для автоматизации процесса?

В какой-то момент я узнал, что вам нужно использовать webtoolkits, например, selenium, чтобы автоматизировать очистку.

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

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 

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

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

One Solution collect form web for “Как использовать селен вместе со скрипом для автоматизации процесса?”

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

 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 .

Python - лучший язык программирования в мире.