How to get the inner text of a webpage with a Javascript executor in Selenium with python?



We can get the inner text of a webpage with a Javascript executor in Selenium. Javascript is a language used for scripting and runs on the client side (on the browser). Selenium gives default methods to work with Javascript.

Syntax

print(driver.execute_script('return document.documentElement.innerText'))

There are couple of methods of working with Javascript −

  • Javascript execution at document root level.

In this process, we shall identify the element with locators (class or id) and then perform the required action on it. Then execute_script() method is called and the Javascript is passed as a string to it.

Syntax

javas = "document.getElementsByName('user-search')[0].click();"
driver.execute_script(javas)

Please note, we have used getElementsByName('user-search')[0]. The functions like getElementsByName and getElementsById return an array of matching elements. So for locating the first element, the index[0] is used.However if we are using getElementById function, we need not use the index since only one matching element is referred there.

Finally, for execution the web driver will put the Javascript statement in the browser and then perform the necessary action like clicking the required button. This Javascript does not mingle with the Javascript present in the webpage.

  • Javascript execution at element level.

In this process, we shall identify the element with the help of web driver methods like find_element_by_xpath or find_element_by_id and so on. Then execute the necessary action on it like clicking the element. Finally, the method execute_script() is called. This method has the Javascript statement and the identified webelement as arguments.

Syntax

userN= driver.find_element_by_id("user-search']")
driver.execute_script("arguments[0].click();", userN)

If the web element is not identified by Javascript, exception is thrown by the webdriver with Message, for example −

selenium.common.exceptions.WebDriverException − Message − unknown error − Cannot read property 'innerHTML'

Also, there may be scenarios, when an improper action or a faulty name of function is used, for example a spelling error in function. In these cases as well, similar web driver exceptions will be thrown.

The Javascript executor is also capable of returning values. Thus execute_script() can return values for example we can fetch the title of the page using this concept.

Syntax

print driver.execute_script('return document.title')

Example

Code Implementation with Javascript for getting innerText of webpage.

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://www.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()
raja
Published on 28-Jul-2020 18:31:25
Advertisements