selenium
極客教程
使用python 調(diào)用scrapy的 爬蟲Spider并且相互之間可以正常傳參實(shí)現(xiàn)全局
常規(guī)情況創(chuàng)建,使用命令
scrapy genspider baidu "baidu.com"
Python中Scrapy框架詳解
瀏覽器調(diào)試模式下(F12 或 右鍵檢查)Command + shift + p
Disable javascript 禁用js
Enable javascript 恢復(fù)js
三、如何獲取js渲染的節(jié)點(diǎn)?
1.使用Selenium模擬瀏覽器操作
Selenium是一個(gè)自動(dòng)化測(cè)試工具,可以模擬人類操作瀏覽器。我們可以使用Selenium來(lái)打開網(wǎng)頁(yè)并執(zhí)行js代碼,然后再通過(guò)BeautifulSoup或正則表達(dá)式提取數(shù)據(jù)。但是這種方法比較慢,并且需要下載瀏覽器驅(qū)動(dòng)。
備注:dryscrape selenium
2.使用PhantomJS(Selenium放棄了PhantomJS方法)
PhantomJS是一個(gè)無(wú)界面的Webkit瀏覽器,可以用來(lái)執(zhí)行js代碼并獲取渲染后的HTML代碼。相比于Selenium,它更加輕便快速,并且不需要下載額外的瀏覽器驅(qū)動(dòng)。
3.使用Pyppeteer
Pyppeteer是一個(gè)Python版的Headless Chrome工具,也可以用來(lái)執(zhí)行js代碼并獲取渲染后的HTML代碼。與PhantomJS相比,它更加穩(wěn)定和可靠,但是需要安裝Chromium瀏覽器。
實(shí)現(xiàn)方案:
http://phantomjs.org/
https://blog.51cto.com/u_16099306/6600178
Pyppeteer入門及中文教程
Scrpay-動(dòng)態(tài)頁(yè)面爬取
Scrapy 和 Pyppeteer 更優(yōu)雅的對(duì)接方案
Pyppeteer 動(dòng)態(tài)加載沒(méi)有成功
回來(lái)修復(fù)bug
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get("http://hotel.qunar.com/")
data = driver.title
print (data)
Traceback (most recent call last):
File "D:\workplace\ScrapyDemo\main.py", line 53, in <module>
driver = webdriver.PhantomJS()
AttributeError: module 'selenium.webdriver' has no attribute 'PhantomJS'
Process finished with exit code 1
原因:
新版的 selenium已經(jīng)放棄PhantomJS,所以才會(huì)出現(xiàn)module ‘selenium.webdriver’ has no attribute ‘PhantomJS’。PhantomJS安裝都是最新版本,pip install selenium安裝的也是最新版本。
(venv) > pip uninstall selenium
Found existing installation: selenium 4.11.2
Uninstalling selenium-4.11.2:
Would remove:
d:\workplace\scrapydemo\venv\lib\site-packages\selenium-4.11.2.dist-info\*
d:\workplace\scrapydemo\venv\lib\site-packages\selenium\*
Proceed (Y/n)? y
Successfully uninstalled selenium-4.11.2
(venv) > pip install selenium==3.8.0
Collecting selenium==3.8.0
Downloading selenium-3.8.0.tar.gz (805 kB)
PhantomJS介紹
PhantomJS是一個(gè)基于webkit的JavaScript API。它使用QtWebKit作為它核心瀏覽器的功能,使用webkit來(lái)編譯解釋執(zhí)行JavaScript代碼。任何你可以在基于webkit瀏覽器做的事情,它都能做到。它不僅是個(gè)隱形的瀏覽器,提供了諸如CSS選擇器、支持Web標(biāo)準(zhǔn)、DOM操作、JSON、HTML5、Canvas、SVG等,同時(shí)也提供了處理文件I/O的操作,從而使你可以向操作系統(tǒng)讀寫文件等。PhantomJS的用處可謂非常廣泛,諸如前端無(wú)界面自動(dòng)化測(cè)試(需要結(jié)合Jasmin)、網(wǎng)絡(luò)監(jiān)測(cè)、網(wǎng)頁(yè)截屏等。
PhantomJS官方地址:http://phantomjs.org/。
PhantomJS官方API:http://phantomjs.org/api/。
PhantomJS官方示例:http://phantomjs.org/examples/。
PhantomJS GitHub:https://github.com/ariya/phantomjs/。
Windows系統(tǒng)下Chromedriver.exe安裝及配置
在利用selenium工具進(jìn)行Web自動(dòng)化測(cè)試時(shí),必須先要安裝瀏覽器驅(qū)動(dòng),通常比較常用的是谷歌瀏覽器和火狐瀏覽器。
一、瀏覽器驅(qū)動(dòng)下載地址
1.瀏覽器驅(qū)動(dòng)官網(wǎng):http://chromedriver.storage.googleapis.com/index.html
https://googlechromelabs.github.io/chrome-for-testing/
2.淘寶鏡像網(wǎng)站(推薦):http://npm.taobao.org/mirrors/chromedriver/
二、配置過(guò)程
首先需要在打開網(wǎng)站之前查看谷歌瀏覽器的版本,驅(qū)動(dòng)必須與瀏覽器版本一致,否則不起作用。
其次,打開驅(qū)動(dòng)網(wǎng)站,找到與版本號(hào)一致的驅(qū)動(dòng)下載
selenium中的三種等待方式(顯示等待WebDriverWait()、隱式等待implicitly()、強(qiáng)制等待sleep())—基于python
使用python自帶模塊time的sleep方式
缺點(diǎn):即使網(wǎng)絡(luò)條件較好時(shí),依舊按照預(yù)定固定時(shí)間等待,一般不建議使用,腳本調(diào)試可使用。
示例腳本:
from selenium import webdriver
from time import sleep
class TestWait(object):
driver = webdriver.Chrome()
driver.get(http://www.baidu.com)
def test_sleep(self):
self.driver.find_element_by_id("kw").send_keys("sleep test")
# sleep(2) #等待固定時(shí)間
self.driver.implicitly_wait(2) # 隱式等待
self.driver.find_element_by_id("su").click()
self.driver.quit()
if __name__ == '__main__':
wait=TestWait()
wait.test_sleep()
2 隱式等待(implicitly_wait)
隱式等待設(shè)置的時(shí)間是最長(zhǎng)的時(shí)間,如果在規(guī)定時(shí)間內(nèi)網(wǎng)頁(yè)加載完成,則執(zhí)行下一步,否則一直等到時(shí)間結(jié)束,然后執(zhí)行下一步。
注意:隱式等待對(duì)driver整個(gè)周期都起作用,一般在最開始設(shè)置一次就可以了。不要當(dāng)做固定等待,哪里都設(shè)置隱式等待。
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(seconds)
示例腳本:
from selenium import webdriver
from time import sleep
class TestWait(object):
driver = webdriver.Chrome()
driver.get(http://www.baidu.com)
def test_sleep(self):
self.driver.find_element_by_id("kw").send_keys("sleep test")
self.driver.implicitly_wait(2) # 隱式等待
self.driver.find_element_by_id("su").click()
self.driver.quit()
if __name__ == '__main__':
wait=TestWait()
wait.test_sleep()
3 顯示等待(WebDriverWait)
顯式等待允許等待條件的發(fā)生,所以非常適合在瀏覽器及其DOM和WebDriver腳本之間同步狀態(tài)。
示例腳本:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
class TestWait(object):
def setup(self):
self.driver = webdriver.Chrome()
self.driver.get(http://www.baidu.com)
def test_webdreiverwait(self):
webdreiverwaits =WebDriverWait(self.driver,2)
webdreiverwaits.until(ec.title_is("百度一下,你就知道"))
self.driver.find_element_by_id("kw").send_keys("test_webdreiverwait test")
self.driver.find_element_by_id("su").click()
def teardown(self):
self.driver.quit()
if __name__ == '__main__':
wait=TestWait()
wait.test_webdreiverwait()
Python3+Selenium 配置Chrome選項(xiàng)
攜帶cookie
https://www.cnblogs.com/clement-jiao/p/10889234.html文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-644084.html
讀取大型文件文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-644084.html
到了這里,關(guān)于極客教程 scrapy和selenium的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!