user2694306
user2694306

Reputation: 4060

Python Selenium On Local HTML String

I am trying to run Selenium on a local HTML string but can't seem to find any documentation on how to do so. I retrieve HTML source from an e-mail API, so Selenium won't be able to parse it directly. Is there anyway to alter the following so that it would read the HTML string below:

Python Code for remote access:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_class_name("q")

Local HTML Code:

s = "<body>
        <p>This is a test</p>
        <p class="q">This is a second test</p>
     </body>"

Upvotes: 14

Views: 21499

Answers (4)

timbre timbre
timbre timbre

Reputation: 14005

If I understand the question correctly, I can imagine 2 ways to do this:

  1. Save HTML code as file, and load it as url file:///file/location. The problem with that is that location of file and how file is loaded by a browser may differ for various OSs / browsers. But implementation is very simple on the other hand.
  2. Another option is to inject your code onto some page, and then work with it as a regular dynamic HTML. I think this is more reliable, but also more work. This question has a good example.

Upvotes: 16

jolancornevin
jolancornevin

Reputation: 1129

If you don't want to create a file or load a URL before being able to replace the content of the page, you can always leverage the Data URLs feature, which supports HTML, CSS and JavaScript:

from selenium import webdriver

driver = webdriver.Chrome()
html_content = """
<html>
     <head></head>
     <body>
         <div>
             Hello World =)
         </div>
     </body>
</html>
"""

driver.get("data:text/html;charset=utf-8,{html_content}".format(html_content=html_content))

Upvotes: 23

leontrolski
leontrolski

Reputation: 385

Here was my solution for doing basic generated tests without having to make lots of temporary local files.

import json
from selenium import webdriver
driver = webdriver.PhantomJS()  # or your browser of choice

html = '''<div>Some HTML</div>'''
driver.execute_script("document.write('{}')".format(json.dumps(html)))
# your tests

Upvotes: 6

Corey
Corey

Reputation: 133

If I am reading correctly you are simply trying to get text from an element. If that is the case then the following bit should fit your needs:

    elem = driver.find_element_by_class_name("q").text
    print elem

Assuming "q" is the element you need.

Upvotes: -1

Related Questions