2017-09-18 4 views
0

クロムドライバでScrapyとSeleniumを使用してウェブサイトをスクラップしています。私は404を与えているウェブサイトに実装されている保護機構があるので、Scrapyを使用してウェブサイトを掻き集めることはできません。私が治療でセレンを使用しているとき、私はページhtmlにアクセスできます。しかし、問題は私がセレニウムを使用しているときです。セッションクッキーを治療を通してアクセスされたすべてのリンクに保持することができません。私はあなたがクッキーセレンとクロームドライバを使った治療は、複数のリクエストでセッションを保持します

cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’} 
driver.add_cookie(cookie) 

を設定することができ、あなたのクッキーを取得する必要がある場合は、

driver.get_cookies() 

を使用することができます

など
# -*- coding: utf-8 -*- 
import scrapy 
from selenium import webdriver 
class SettingSpider(scrapy.Spider): 
    name = 'setting' 
    allowed_domains = ['example.com'] 
    start_urls = ['http://example.com/'] 

    def __init__(self): 
     self.driver = webdriver.Chrome() 

    def start_requests(self): 
     url = 'http://www.example.com/' 
     self.driver.get(response.url) 
     yield scrapy.Request(url, self.parse) 

    def parse(self, response): 
     csrf = response.xpath('//input[@name="CSRFToken"]/@value').extract_first().strip() 
     print('------------->' + csrf) 
     url = 'http://www.example.com/settings' 

     form_data = {'shippingCountry': 'ARE', 'language': 'en', 'billingCurrency': 'USD', 'indicativeCurrency': '', 
       'CSRFToken:': csrf} 
     yield scrapy.FormRequest(url, formdata=form_data, callback=self.after_post) 

    def getShippingCountry(self, response): 
     country = response.css("a#shipping-country::text").extract_first().strip() 
     return country 

    def after_post(self, response): 
     country = self.getShippingCountry(response) 
     print('------------->' + country) 
+0

クロムを使用しているため、セッションは維持されます。それは問題ではない、問題はあなたの命令の順序かもしれない –

答えて

0

を国のようないくつかのセッションパラメータを設定する、言語詳細についてはthis

関連する問題