如何使用 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.com/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()

更新于:2020年7月28日

2K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告