python selenium IE Firxfor pyinstaller

之前在python環境下selenium 主要用的是chromdriver,此次發現總是報錯(Timeout), 實際又是正確的, 多是和chrome版本不正確,再加上我程序蹦來就在windows環境下。javascript

IE瀏覽器驅動下載連接:http://selenium-release.storage.googleapis.com/index.html,我這裏安裝的是v3.0(擔憂最新的有問題),運行代碼發現成功。html

Firefox 瀏覽器下載連接:https://github.com/mozilla/geckodriver/releases/, 我這裏安裝的是 java

geckodriver-v0.24.0-win64.zip ,Firefox  是最新的68.0\python

若是是在linux(ubuntu)下, 首先下載文件,而後切換到下載目錄 執行如下語句:linux

tar -xvzf geckodriver*
chmod +x geckodriver
sudo mv geckodriver /usr/local/bin/

能夠參考 https://blog.csdn.net/qq_23926575/article/details/77268924git

把下載文件放在python的安裝目錄的Scripts下比較方便(這樣就能夠不用指定路徑了)
github

咱們在爬網的時候常常須要用到requests(發送http請求)和BeautifulSoup 分析網頁的返回內容web

csdn:chrome

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.common.exceptions import TimeoutException
import requests
from bs4 import BeautifulSoup
import time

opts = Options()
#opts.headless =True
opts.add_argument("--headless")
#br = webdriver.Ie(r'D:/python/IEDriverServer.exe')

url="https://blog.csdn.net/xxx/article/list/"
for i in range(60):
  try:
    #br = webdriver.Firefox(firefox_options=opts)
    br = webdriver.Firefox(options=opts)
    #br = webdriver.Ie(r'D:/python/IEDriverServer.exe')
    r = requests.get(url+str(i))
    soup = BeautifulSoup(r.text,"lxml")
    s= soup.find_all("div",class_ ="article-item-box csdn-tracking-statistics")
    for item in s:
        temp=item.h4.a.get("href")
        if temp.startswith("https://blog.csdn.net/xxx"):
            try:
                print(temp)
                br.get(temp)
                time.sleep(60)
            except TimeoutException:
                br.execute_script("window.stop()")
            except Exception as et:
                print("Error detail:",et)
  except Exception as e:
    print("Error:",e)
  finally:
    br.quit()

cnblogs:ubuntu

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.common.exceptions import TimeoutException
import requests
from bs4 import BeautifulSoup
import time

opts = Options()
opts.add_argument("--headless")
url="https://www.cnblogs.com/xxx/default.html?page="
for i in range(9):
  try:
    #br = webdriver.Firefox(firefox_options=opts)
    br = webdriver.Firefox(options=opts)
    r = requests.get(url+str(i))
    soup = BeautifulSoup(r.text,"lxml")
    soup = soup.find(id='content')
    s= soup.find_all("h2")
    for item in s:
        temp=item.a.get("href")
        if temp.startswith("https://www.cnblogs.com/xxx/"):
            try:
                print(temp)
                br.get(temp)
                time.sleep(60)
            except TimeoutException:
                br.execute_script("window.stop()")
            except Exception as et:
                print("Error detail:",et)
  except Exception as e:
    print("Error:",e)
  finally:
    br.quit()

而後運行 pyinstaller -F xxx.py來打包成exe文件

在windows用以下語句

opts.headless =True
br = webdriver.Firefox(options=opts)

在ubuntu須要改成

opts.add_argument("--headless")
br = webdriver.Firefox(firefox_options=opts) 

若是windows下會有以下提示:

可是在處理https的時候須要注意了:

調用IE來打開對應的網頁問題,可是在實際測試中,有些網站是採用https協議的,這時候IE瀏覽器會彈出以下窗口,通常手動選擇後,纔可進入登陸界面,而在webdriver調用瀏覽器後,沒法繼續操做,那麼該如何解決呢?

 

方法一:代碼增長配置

首先,咱們能夠能夠查看該網頁的源碼,分析下代碼,能夠看到下面部分信息:

<h4 id="continueToSite">

<img src="red_shield.png" ID="ImgOverride" border="0" alt="不推薦圖標" class="actionIcon">

<A href='' ID="overridelink" NAME="overridelink" >繼續瀏覽此網站(不推薦)。 </A>

</h4>

述標記部分的,則是上圖標記的地方,通常咱們點擊該圖標後便可進入登陸窗口,下面代碼中經過調用javascript來操做瀏覽器的提示框,來跳過該提示便可:

#coding=utf-8
from selenium import webdriver

driver=webdriver.Ie()
firsturl='https://172.172.110.8/Terminal/logon.do'
driver.get(firsturl)
driver.get("javascript:document.getElementById('overridelink').click();")#解決IE提示問題
driver.close()

方法二:瀏覽器配置

方法二則是經過配置瀏覽器的方法,解決證書問題,方法以下:

一、點擊【繼續瀏覽此網頁】後進入登陸窗口,此時地址欄後面會出現【證書錯誤】提示

 

二、點擊證書錯誤——查看證書,提示證書無效,則是由於證書不被信息,須要安裝證書

 

三、彈出證書界面,選擇安裝證書

 

四、按嚮導操做,注意在下列步驟中須要選擇證書位置

五、配置完成後,此時依然是沒法登錄的,點擊繼續瀏覽後,彈出的錯誤提示爲:不匹配的地址,以下,還須要繼續配置

六、Internnet選項——高級下,去除下圖中標記項的勾,而後保存

 

七、從新打開地址,此時仍然會彈出提示,選擇繼續瀏覽後,會發現上方的地址欄變爲一個小鎖,如右圖,說明已經配置OK,後續在打開該地址就不會彈出錯誤選項了。

 

八、若仍是沒法登錄,能夠在Internet選項—安全中:設置安全等級爲低等級,並在高級選項下,將下屬五項所有勾選後重啓瀏覽器便可

 

關於調用IE瀏覽器的錯誤處理

運行過程當中若是出現錯誤:WebDriverException: Message: u'Unexpected error launching Internet Explorer.  Protected Mode settings are not the same for all zones. Enable Protected  Mode must be set to the same value (enabled or disabled) for all zones.

解決方法

更改IE的internet選項->安全,將Internet/本地Internet/受信任的站定/受限制的站點中的啓用保護模式所有去掉勾,或者所有勾上

相關文章
相關標籤/搜索