linux centos 安裝chrome selenium 實現(xiàn)自動簽到

在linux centos7上通過selenium、chromedriver實現(xiàn)網(wǎng)站(京東、西集、考拉)自動簽到

centos7安裝chrome

騰訊云服務(wù)器,操作系統(tǒng)centos7.4,安裝chrome使用npm方式。

步驟如下

chrome默認安裝目錄/opt/google/chrome
可以用如下命令測試是否安裝成功:google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot https://www.baidu.com/
安裝成功會在當前目錄生成百度首頁截圖(會報一個錯,但沒什么影響,是個缺少UI的提示),將截圖下載到windows機器,打開看到字體都是亂碼。這個亂碼對后來的腳本運行造成了很大誤導。后面會詳說。

遇到的問題:

  • 缺少相關(guān)依賴,逐個進行安裝
  • 現(xiàn)在chrome最低支持centos7。centos6上的一些安裝腳本或方案均已失效,本想在公司測試機6.9上安裝,搜了一些資料最后發(fā)現(xiàn)是徒勞。甚至之前在6上能繞過一些限制安裝chrome的腳本的作者在他網(wǎng)站上聲明,該腳本已死,不要再聯(lián)系他了。
    • 7上的一些依賴都是無法在6上安裝的,yum找不到對應的庫
  • centos6可以考慮安裝chromium

安裝chromedriver

需要注意的是chromedriver必須要與chrome版本對應,否則不能正常工作。我這里安裝的是chrome68,對應的是chromedriver版本是2.41
對應關(guān)系和下載地址,百度就可以看到。下面地址僅供參考,隨時失效

  1. 對應關(guān)系地址
  2. 下載地址

測試chromedriver:

[root@VM_0_11_centos chrome]# ./chromedriver
Starting ChromeDriver 2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706) on port 9515
Only local connections are allowed.  

如上說明啟動成功。這里./chromediver --help可以查看命令使用說明。如果有報錯信息,可以加上參數(shù)./chromedriver --verbose輸出詳細日志。
我在這里遇到一個問題,查了很久,運行./chromedriver命令后,一直報錯,報一個[SERVER]中間一長串英文(99),記不住了,查了很久無果,最后打開verbose參數(shù),提示了一個IPV6什么的錯誤,就把系統(tǒng)的ipv6地址設(shè)置打開了,命令是:sysctl -w net.ipv6.conf.all.disable_ipv6=0,之后就不再報錯了。但后來通過selenium運行的時候發(fā)現(xiàn),不必理會該報錯。

運行selenium程序

此處值得說明是,chromeDriver需要設(shè)置一些options,代碼如下:

 System.setProperty("webdriver.chrome.driver", "/opt/google/chrome/chromedriver");
 ChromeOptions options = new ChromeOptions();
 options.addArguments("--headless");
 options.addArguments("--no-sandbox");
 options.addArguments("--disable-gpu");
 options.addArguments("--window-size=1920,1080");
 ChromeDriver driver = new ChromeDriver(options);

遇到的問題

現(xiàn)象:xiji網(wǎng)可以正常登錄,但kaola、jd就失敗,登錄不成功
結(jié)論:某些網(wǎng)站有安全驗證機制,比如網(wǎng)易,如果登錄IP非常用IP,會彈出驗證碼。京東則會有一個中間頁提示安全信息。

說說錯誤
考拉的問題:

因為xiji的成功,加上截圖里的亂碼,一直以為是字符編碼的問題,導致用戶名密碼錯誤,服務(wù)器不認。于是又是設(shè)置系統(tǒng)語言,又是安裝字體,設(shè)置java文件編碼,設(shè)置都沒有效果。

京東的問題:

京東登錄失敗的問題在于,用用戶名登陸后跳到了一個中間頁,提示有安全風險,要我去綁定手機,但我手機已經(jīng)綁定了,如果直接用手機號+密碼登錄就沒問題。估計也是IP變化造成的問題。

下面我說說怎么定位問題的。

chrome remote debug

這是chrome的一個debug功能,可以用來在別的機器或chrome里debug無頭chrome。
輸入命令:

STEP1:在遠程機器(云服務(wù)器)上執(zhí)行:

google-chrome-stable --no-sandbox --headless --disable-gpu --remote-debugging-port=9222 https://m.kaola.com/login.html 

如此就在9222上監(jiān)聽了chrome的debug端口

STEP2:這里需要注意,上述操作只是chrome在本地暴露一個地址,遠程是無法訪問的,在windows機器上打開http://ip:9222是無法訪問的,此時需要在云服務(wù)器上做一個端口映射,這里使用ssh命令

 ssh -L 0.0.0.0:9223:localhost:9222 localhost -N  

STEP3:
在chrome地址欄里輸入http://ip:9223 能看到當前chrome debug信息,輸入http://ip:9223/json 能看到一些相信信息,這里暴露了一個websocket的調(diào)試地址

http://ip:9223/devtools/devtools.html?ws://ip:9223/devtools/page/ADE6C8375C62850FDD7C951260626600

這個地址是給websorcket用的,可能需要一些開發(fā)才能使用,這里沒有深入。只作了解

STEP4:
在windows機器上打開chrome,地址欄輸入

chrome://inspect/#devices
enter image description here

先在第一個紅框處,配置服務(wù)器ip,當chrome檢測到的時候,就會在remote target里出現(xiàn)一個Target,點擊第二個紅框,inspect,就進入debug模式了,就會打開一個窗口,里面就是在云服務(wù)上運行的chrome界面,地址是上面配置的https://m.kaola.com/login.html

enter image description here

這種方案的缺點主要有兩個:

  1. 網(wǎng)頁亂碼。但實際上并非亂碼,代碼完全跑的通,用瀏覽器F12看源碼字體也不是亂碼,為什么網(wǎng)頁渲染亂碼,更深入的原因查不到
  2. 操作延遲高,有的網(wǎng)站還算流暢,有的網(wǎng)站就很卡,做一個 操作延遲很久,影像正常操作。只能做一些基本驗證。

通過這種方案,我檢查到了為什么考拉總是登錄失敗的原因。我發(fā)現(xiàn),kaola登錄的時候總是提示滑動驗證碼,原來是ip不合法了,想必是第一次的時候就發(fā)現(xiàn)不是常用ip,讓輸入滑動驗證碼,之后一直嘗試登錄,ip可能被拉黑了。

京東的問題是,點擊登錄,跳到了一個中間頁,提示手機綁定安全之類的,后來改為手機號登錄就沒問題了。

通過remote debug方式,找到了登錄失敗的原因,下面看看怎么解決ip被封的問題。

使用squid代理

一般來說,服務(wù)器拉黑ip的幾種情況

  • 短時間頻繁訪問
  • 密碼多次輸入錯誤
  • 非常用ip登錄

如何讓ip解封?大概有幾種:

  1. 輸入正確密碼,等待服務(wù)器解封
  2. 換一個賬號試試
  3. 重新注冊賬號,并登錄

最糟糕的情況是,整個ip被封,無論使用哪個賬號都需要驗證。這次還比較幸運,重新注冊了一個網(wǎng)易賬號,登錄后,該賬號就不再需要滑動驗證。

那么問題來了,遠程云服務(wù)器的IP怎么才能解封?云服務(wù)器沒有界面,破解滑動驗證碼,成本太高;使用remote debug,亂碼操作難度大,延遲太高,效率低下。

這里使用squid代理,在云服務(wù)器上安裝squid,暴露8000端口,本機windows 通過java代碼,chromedriver設(shè)置chrome的proxy地址為云服務(wù)器地址,端口8000,具體操作如下:

yum install squid
   
1.vi  /etc/squid/squid.conf,  在結(jié)尾處追加:
dns_nameservers 8.8.8.8
http_port 8000
cache_mem 60 MB  
2.注釋掉默認的http_access deny all

創(chuàng)建squid交換目錄:
cd /usr/sbin/
./squid -z

啟動squid:
./squid

查看端口狀態(tài):
netstat -ntl

停止squid:
./squid -k shutdown

此時,squid已經(jīng)安裝并啟動完畢,在windows本機,java代碼里加入

ChromeOptions options = new ChromeOptions();
options.addArguments("--proxy-server=http://188.131.133.231:8000");
ChromeDriver driver = new ChromeDriver(options);

然后啟動程序,打開chrome瀏覽器,此時打開百度,在搜索欄輸入ip138,顯示已經(jīng)是云服務(wù)器的ip了,如此一來,本機chrome代理到云服務(wù)器上,可以手動輸入滑動驗證碼,進行解鎖。

我在這里試驗了幾種方式,老賬號多次滑動驗證通過,依然需要滑動驗證,可能時間還不到。
通過新注冊網(wǎng)易賬號,登錄,不需要驗證碼。通過。

總結(jié)

至此,考拉的驗證和京東的驗證都通過了,幾個主要的難點及知識點

  • chrome在linxu上界面亂碼原因?qū)е聠栴}查找走了很大彎路
  • 通過chrome remote debug定位linux chrome問題
  • 通過squid代理,將云服務(wù)器ip映射到本地,本地手動滑動驗證碼解鎖ip
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用戶登錄三次重試 主要實現(xiàn)的是: 設(shè)置初始用戶名和登錄密碼; 進入登錄頁面,提醒輸入用戶輸入用戶名和密碼; 若用戶...
    ae0fdc75017d閱讀 111評論 0 1
  • 聲明:以下文字均轉(zhuǎn)自北京問鼎之音文化發(fā)展有限公司官方網(wǎng)站,轉(zhuǎn)載請注明出處。 我們正處在一個多媒體時代。 而視覺和聽...
    不朽華夏之魂閱讀 147評論 0 0
  • 現(xiàn)在一切或喜或悲的經(jīng)歷,都會在將來的某一刻派上用場 我用這句話治愈了好多次消極的Moment,卻在此刻卻無濟于事 ...
    Amylinnnnn閱讀 182評論 0 1
  • 自虐~自燃~自律 【2018年度目標及檢視完成情況】 羅列年度目標及完成進度 【月度成果&溫馨時刻】 一、健康:跑...
    李玉平覺醒閱讀 273評論 0 0
  • 西瓜會五分鐘實用營銷課股權(quán)眾籌方案 [TOC] 本次融資100萬元,出讓股權(quán)10%,1萬起投。創(chuàng)始人:怪木西西 電...
    怪木勇勇閱讀 940評論 0 0

友情鏈接更多精彩內(nèi)容