本地HTML字符串上的Python Selenium

use*_*306 6 python selenium

我试图在本地HTML字符串上运行Selenium但似乎无法找到有关如何执行此操作的任何文档.我从电子邮件API中检索HTML源代码,因此Selenium无法直接解析它.是否有改变以下内容,以便它将读取下面的HTML字符串:

用于远程访问的Python代码:

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")
Run Code Online (Sandbox Code Playgroud)

本地HTML代码:

s = "<body>
        <p>This is a test</p>
        <p class="q">This is a second test</p>
     </body>"
Run Code Online (Sandbox Code Playgroud)

Kir*_* S. 10

如果我正确理解了这个问题,我可以想象两种方法:

  1. 将HTML代码保存为文件,并将其加载为url file:///file/location.问题在于,对于各种OS /浏览器,文件的位置以及浏览器如何加载文件可能会有所不同.但另一方面,实现非常简单.
  2. 另一个选择是将代码注入某个页面,然后将其作为常规动态HTML使用.我认为这更可靠,但也更多的工作.这个页面有一个很好的例子.


jol*_*vin 6

如果您不想在无法替换页面内容之前创建文件或加载URL,则可以随时使用支持HTML,CSS和JavaScript 的数据URL功能:

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))
Run Code Online (Sandbox Code Playgroud)


leo*_*ski 5

这是我进行基本生成测试的解决方案,无需制作大量临时本地文件。

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
Run Code Online (Sandbox Code Playgroud)