1. 程式人生 > >selenium與selenium在scrapy中的整合

selenium與selenium在scrapy中的整合

from selenium import webdriver
from scrapy.selector import Selector
import time

#1、selenium獲取頁面元素
# browser = webdriver.Chrome(executable_path="D:/browserexe/chromedriver.exe")
# browser.get("https://item.taobao.com/item.htm?spm=a310p.7395725.1998460392.1.ffca6c0NXDhB5&id=549869514793") #執行瀏覽器
# page_source = browser.page_source  #相當於“瀏覽器f12”,普通爬蟲獲取的原始碼是相當於直接獲取網頁原始碼,所以js動態新增的內容不會被獲取到,但是通過這種方式f12,會獲取到js動態新增的
# t_selector = Selector(text=page_source)#頁面元素提取能用scrapy儘量用,不能用在用selenium,因為scrapy速度更快 # print(t_selector.css('#J_PromoPriceNum::text').extract_first()) #獲取頁面js動態新增上去的價格 # browser.quit() #2、selenium模擬知乎登陸 # browser = webdriver.Chrome(executable_path="D:/browserexe/chromedriver.exe") # browser.get("https://www.zhihu.com/#signin")
# browser.find_element_by_css_selector('.signin-switch-password').click() #點選使用密碼登陸 # browser.find_element_by_name('account').send_keys('username') #輸入賬號 # browser.find_element_by_name('password').send_keys('password')#輸入密碼 # time.sleep(6) #等待輸入驗證碼 # browser.find_element_by_css_selector(".view-signin button.sign-button").click()
# browser.quit() #3、selenium模擬微博登陸 # browser = webdriver.Chrome(executable_path="D:/browserexe/chromedriver.exe") # browser.get("http://weibo.com/login.php") # time.sleep(2)#防止頁面未載入完成,就直接去查詢元素找不到的情況 # browser.find_element_by_id('loginname').send_keys('13247629622') # browser.find_element_by_css_selector('.info_list .input_wrap input[name="password"]').send_keys('lxj546630576.') # browser.find_element_by_css_selector('.info_list a[action-type="btn_submit"]').click() # #滑鼠下滑載入 # for i in range(3): #下滑三次 # browser.execute_script('window.scrollTo(0,document.body.scrollHeight);var leftOfPage = document.body.scrollHeight;return leftOfPage;') #執行js程式碼 # time.sleep(2) #4、設定selenium不載入圖片 # chrome_opt = webdriver.ChromeOptions() # prefs = {"profile.managed_default_content_settings.images":2} # chrome_opt.add_experimental_option("prefs", prefs) # browser = webdriver.Chrome(executable_path="D:/browserexe/chromedriver.exe",chrome_options=chrome_opt) # browser.get("https://www.taobao.com") #5、phantomjs(不推薦使用), 無介面的瀏覽器, 多程序情況下phantomjs效能會下降很嚴重 #下載phantomjs驅動 browser = webdriver.PhantomJS(executable_path="D:/browserexe/phantomjs.exe") browser.get("https://detail.tmall.com/item.htm?spm=a230r.1.14.3.yYBVG6&id=538286972599&cm_id=140105335569ed55e27b&abbucket=15&sku_properties=10004:709990523;5919063:6536025") print (browser.page_source) browser.quit() #6、將selenium整合scrapy中 #6.1 middlewares中新增 from scrapy.http import HtmlResponse class JSPageMiddleware(object): #通過chrome請求動態網頁 def process_request(self, request, spider): if spider.name == "jobbole": # browser = webdriver.Chrome(executable_path="D:/Temp/chromedriver.exe") spider.browser.get(request.url) import time time.sleep(3) print ("訪問:{0}".format(request.url)) #不需要放到下載器,去下載頁面,直接renturn return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source, encoding="utf-8", request=request) #6.2 spiders中新增 # from scrapy.xlib.pydispatch import dispatcher # from scrapy import signals # def __init__(self): # 初始化時候,給爬蟲新開一個瀏覽器 # self.browser = webdriver.Chrome(executable_path="D:/Temp/chromedriver.exe") # super(JobboleSpider, self).__init__() # dispatcher.connect(self.spider_closed, signals.spider_closed)#第二個引數是訊號(spider_closed:爬蟲關閉訊號,訊號量有很多),第一個引數是當執行第二個引數訊號時候要執行的方法 # # def spider_closed(self, spider): # #當爬蟲退出的時候關閉chrome # print ("spider closed") # self.browser.quit() #7、不顯示瀏覽器介面(不作為重點) # from pyvirtualdisplay import Display # display = Display(visible=0, size=(800, 600)) #visible瀏覽器不顯示,windows下不支援,如果出錯“no such file or directory”:pip install xvfbwrapper(xvfb) # display.start() # # browser = webdriver.Chrome() # browser.get()

相關推薦

seleniumselenium在scrapy整合

from selenium import webdriver from scrapy.selector import Selector import time #1、selenium獲取頁面元素 # browser = webdriver.Chrome(executabl

Scrapy整合selenium

面對眾多動態網站比如說淘寶等,一般情況下用selenium最好 那麼如何整合selenium到scrapy中呢? 因為每一次request的請求都要經過中介軟體,所以寫在中介軟體中最為合適 from selenium import webdriver from scrapy.http import

SpringBoot2.0學習筆記:(九) Spring Boot整合MybatisDruid

一、專案的搭建 Druid對Spring boot做了很好的適配,所有的工作都只需要在配置檔案中完成。 具體的Druid在Spring Boot中的配置可以看:GitHub文件 首先看一下專案引入的jar包: <dependencies> &

EclipseGitHub的整合(一)——本地Git倉庫的程式碼push至GitHub

團隊合作開發一個專案的時候,使用Git版本控制,將程式碼託管到GitHub上對多人合作是非常方便的。下面介紹一下Eclipse與GitHub的整合——本地Git倉庫程式碼push到GitHub上。 前提條件: 1. 本地已安裝Git 2. 有GitHub賬號 3. 開發

Axis2Web專案整合及Axis2在Web專案整合Spring

Axis2簡介:          Axis2是一套嶄新的WebService引擎,該版本是對Axis1.x重新設計的產物。Axis2不僅支援SOAP1.1和SOAP1.2,還集成了非常流行的REST WebService,同時還支援spring、JSON等技術。

seleniumchromedriver配置過程遇到的坑

Starting ChromeDriver 2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1) on port 15464Only local connections are allowed.4月 12, 2018 5

QuartzSpring的整合-Quartz的job如何自動注入spring容器託管的物件

我們要達到這樣的效果 public class CancelUnpaidOrderTask implements Job { @Autowired private AppOrderService orderService; @Override public void

Maven整合Struts2、Spring3Hibernate

利用Maven對專案進行管理,引入Jar包 首先引入Struts2相管理的jar包,Struts2安全的版本在2.15.1以上 <!-- struts2核心包 --> <dependency> <groupId>org.apa

Selenium裡WebDriver視窗的close()quit()

查了一下網上的webdreiver 的 api,才發現, quit()詳細資訊:  “Quits this driver, closing every associated window”,執行這個方法後,driver會關閉所有關聯視窗。 close()詳細資訊:Cl

IDEA開發環境,SpringMVCSwagger2的整合。完成restful風格的API開發

專案結構Swapper2在POM中的依賴<!-- springfox依賴 --> <dependency> <groupId>io.springfox</groupId> <artifactId>sp

Android友盟第三方登入分享自動整合的那些坑

自動整合的方式現在只支援微信,QQ,新浪三個平臺,如果需要使用其它平臺請選擇手動整合。 1:新增依賴     //友盟統計 compile 'com.umeng.sdk:common:1.5.1' compile 'com.umeng.sdk:analytics:7.5.0

java枚舉.net的枚舉區別

java .net 通過一段時間的項目實踐,發現java中的枚舉與.net中的枚舉有很大的差別,初期造成了我對java中的枚舉一些錯誤理解及部分有缺陷的應用,其實追其原因還是因為我會習慣性的認為java的枚舉在作用以及定義上與.net應該是差不多的,畢竟兩者都是高級語言,語言上也有很多相似之處。這就

cas4.2.7shiro進行整合

exce cor lec ces nco Coding schema enc pattern 準備工作   cas單點登錄開始前準備,請參考cas4.2.7實現單點登錄。 與shiro進行整合   註:準備工作的基礎上,對cas客戶端進行如下改進。   引入相關ja

JDK7JDK8HashMap的實現

技術 span after 一個 關聯 一個數 nod value osc JDK7中的HashMap HashMap底層維護一個數組,數組中的每一項都是一個Entry transient Entry<K,V>[] table; 我們向 HashMap 中所放置

js的innerText、innerHTML、屬性值、valuejQuery的text()、html()、屬性值、val()總結

att text color btn col class 屬性 fun value js與jQuery獲取text、html、屬性值、value的方法是不一樣的。 js與jQuery,text與innerText獲取(<!---->中為結果) html:

SpringQuartz的整合實現定時任務調度

java代碼 content sta 一個bug next 小時 change nsa 發現 Spring與Quartz的整合實現定時任務調度 博客分類: Java Web SpringQuartz任務調度定時任務 最近在研究Spring中的定時任務功能,最好的

oraclemysql的命令 show databases, show tables, desc table類似的命令集

copyright 星期六 time 語句 什麽 ora cte 一個 select 1 怎樣執行一個sql腳本文件,這個腳本文件寫了一系列的sql語句集,比如sql.sql 放在D:\MyEclipse 8.6\Workspaces\OASystem\WebRoot\sq

爬蟲——SeleniumPhantomJS

分享 繼續 移動 alert tor tar orm pass wrap Selenium Selenium是一個Web的自動化測試工具,最初是為網站自動化測試而開發的,類型像我們玩遊戲用的按鍵精靈,可以按指定的命令自動操作,不同的是Selenium可以直接運行在瀏覽器上,

SparkSQLHive的整合

cto home 添加 usr onf cal apach local -c 其他的配置hive基本配置就不記錄了!! 1. 拷貝$HIVE_HOME/conf/hive-site.xml $SPARK_HOME/conf/2. 在$SPARK_HOME/conf/目錄