selenium js 程式碼模擬百度
selenium js 程式碼模擬百度,獲取輸入的值
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time web = webdriver.Ie(r"C:\Program Files\internet explorer\IEDriverServer2.exe") #設定驅動程式路徑 # web = webdriver.Chrome() #設定驅動程式路徑 web.get("https://www.baidu.com") # 開啟百度 # web.execute_script("window.alert('Selenium執行完畢')") # 呼叫js的Window物件列印一句話"Selenium 執行完畢" web.find_element_by_id("kw").send_keys("Hello") # 然後我們讓selenium在百度的input標籤內輸入1個字串(id為kw) 找到id位kw的元素,然後傳送資料 retu = web.execute_script("document.getElementById('kw').value;") print(retu) # 獲取的值為 None 因為我們要用一個彈框來接收這個值 # 即我們用一個變數接收document.getElementById('kw').value資訊,然後再通過彈對話方塊方式看看是否成功獲取。 # 可見js程式碼是沒問題的,問題就出在我們用execute_script執行js程式碼的時候,怎麼把資料返回。 # retu = web.execute_script("a = document.getElementById('kw').value;window.alert(a)") # print(retu) # 既然是函式形式,我們只需要在js內加入return語句,返回我們想要的結果即可。 # 獲取輸入的值 這個才是最終的版本 retu = web.execute_script("return document.getElementById('kw').value;") print(retu)
參考連結: https://jingyan.baidu.com/article/020278112c5f421bcd9ce57d.html
這裡面講的相當詳細,對於入門級別的來說,很實用
玩轉selenium 教你怎麼讓selenium執行js程式碼
相信很多小夥伴在使用selenium驅動瀏覽器的時候都會遇到這樣的問題:相容性,例如我們使用selenium驅動IE開啟某個網站的時候,我們想要點選按鈕,此時卻發現我們用click()方法是無效的,這時我們用send_keys(Keys.SPACE)或者send_keys(Keys.ENTER)卻正常運行了,當我們遇到這樣的情況,一旦更換了瀏覽器,可能就失效了。
就是因為這樣的問題,其實還有第三種解決方案,不用click()或者send_keys()傳送按鍵,那就是呼叫JavaScript的程式碼,直接呼叫按鈕被點選後呼叫的js函式。
下面小編就教大家怎麼用selenium執行js程式碼。
4玩轉selenium 不會安裝selenium怎麼辦(Python)
工具/原料
-
python3 for windows
-
selenium
方法/步驟
-
開始之前,我們必須要安裝有selenium,不會裝的請看引用經驗,謝謝。
開啟cmd命令提示符,pip show selenium
可見小編這裡是selenium3.13,沒錯,我們這裡就是以selenium3為例
-
我們所有程式碼以驅動IE瀏覽器為例,在此之前,請自行準備好IE瀏覽器驅動。沒有的小夥伴可以在經驗最下方給小編投票,留下郵箱,小編第一時間會給小夥伴發過去。
小編手裡的是IEDriverServer 3.6.0.0 在IE8可完美執行
32位和64位的都有
OK,這裡我們開始寫程式碼
#-*- conding:utf8 -*-
from selenium import webdriver
#匯入selenium中的webdriver
web = webdriver.Ie(".\IEDriverServer.exe")
#設定驅動程式路徑
web.get("https://www.baidu.com")
#開啟百度
如圖
-
此時我們可以呼叫js的一段程式碼,例如就呼叫js的Window物件列印一句話"Selenium 執行完畢"
我們要用到的是Selenium庫webdriver物件提供的execute_script方法
程式碼如圖
web.execute_script("window.alert('Selenium執行完畢')")
-
執行程式碼,可以看到驅動器執行之後,打開了百度頁面。
然後呼叫讓js呼叫了window物件的alert方法,探出了一個對話方塊。如圖
-
此時我們可以讓可以讓js去做一些事情,例如讓js去獲取某個頁面元素的資訊。然後再通過selenium返回給python
這裡,我們就讓selenium輸入一些資訊,然後我們通過js去獲取這個資訊。
這之前,我們還需要匯入Selenium的一個模組。
即Keys模組
from selenium.webdriver.common.keys import Keys
#然後我們讓selenium在百度的input標籤內輸入1個字串(id為kw)
web.find_element_by_id("kw").send_keys("Hello")
#找到id位kw的元素,然後傳送資料
-
最後,我們通過js獲得該元素的value值。
js程式碼:
document.getElementById('kw').value;
我們用一個retu變數獲取execute_script的返回值。
retu = web.execute_script("document.getElementById('kw').value;")
print(retu)
然後用print打印出
如圖
-
執行結果卻是retu為None,即說明沒有返回值
這到底是怎麼回事呢?
其實我們可以把js程式碼修改下,確定js程式碼獲取到了id為kw元素的屬性值。
程式碼修改如下。
retu = web.execute_script("a = document.getElementById('kw').value;window.alert(a)")
print(retu)
即我們用一個變數接收document.getElementById('kw').value資訊,然後再通過彈對話方塊方式看看是否成功獲取。
可見js程式碼是沒問題的,問題就出在我們用execute_script執行js程式碼的時候,怎麼把資料返回。
-
事實上,selenium並不是直接把程式碼嵌入到html檔案中,而是以函式的方式。
這樣就好辦了。
既然是函式形式,我們只需要在js內加入return語句,返回我們想要的結果即可。
retu = web.execute_script("return document.getElementById('kw').value;")
print(retu)
快看,是不是成功獲取到資料了呢?怎麼樣,學會沒?點一波關注吧(*^__^*)