如何使用 Python 中 Selenium 的 JavaScript 執行器獲取網頁的內部文字?
我們可以使用 Selenium 中的 JavaScript 執行器獲取網頁的內部文字。JavaScript 是一種用於指令碼編寫的語言,它在客戶端(瀏覽器上)執行。Selenium 提供了預設方法來使用 JavaScript。
語法
print(driver.execute_script('return document.documentElement.innerText'))
有幾種使用 JavaScript 的方法:
在文件根級別執行 JavaScript。
在這個過程中,我們將使用定位器(類或 ID)識別元素,然後對其執行所需的操作。然後呼叫 execute_script() 方法,並將 JavaScript 作為字串傳遞給它。
語法
javas = "document.getElementsByName('user-search')[0].click();" driver.execute_script(javas)
請注意,我們使用了 getElementsByName('user-search')[0]。getElementsByName 和 getElementsById 等函式返回匹配元素的陣列。因此,為了定位第一個元素,使用了索引 [0]。但是,如果我們使用 getElementById 函式,則無需使用索引,因為那裡只引用一個匹配元素。
最後,為了執行,WebDriver 將把 JavaScript 語句放入瀏覽器,然後執行必要的動作,例如單擊所需的按鈕。此 JavaScript 不會與網頁中存在的 JavaScript 混淆。
在元素級別執行 JavaScript。
在這個過程中,我們將使用 WebDriver 方法(例如 find_element_by_xpath 或 find_element_by_id 等)來識別元素。然後對其執行必要的操作,例如單擊元素。最後,呼叫 execute_script() 方法。此方法具有 JavaScript 語句和已識別的 Web 元素作為引數。
語法
userN= driver.find_element_by_id("user-search']") driver.execute_script("arguments[0].click();", userN)
如果 JavaScript 未識別 Web 元素,則 WebDriver 將丟擲異常,例如:
selenium.common.exceptions.WebDriverException - 訊息 - 未知錯誤 - 無法讀取屬性“innerHTML”
此外,還可能出現使用不正確的操作或錯誤的函式名稱的情況,例如函式中的拼寫錯誤。在這些情況下,也會丟擲類似的 WebDriver 異常。
JavaScript 執行器還可以返回值。因此,execute_script() 可以返回值,例如,我們可以使用此概念獲取頁面的標題。
語法
print driver.execute_script('return document.title')
示例
使用 JavaScript 獲取網頁 innerText 的程式碼實現。
from selenium import webdriver #browser exposes an executable file #Through Selenium test we will invoke the executable file which will then #invoke #actual browser driver = webdriver.Chrome(executable_path="C:\chromedriver.exe") # to maximize the browser window driver.maximize_window() #get method to launch the URL driver.get("https://tutorialspoint.tw/index.htm") #to refresh the browser driver.refresh() # get the inner text of page in console print( driver.execute_script('return document.documentElement.innerText')) #to close the browser driver.close()