当前位置: 首页 > 面试题库 >

设置MutationObserver,如何在使用Selenium页面加载之前注入javascript

吕飞翼
2023-03-14
问题内容

我正在尝试将MutationObserver设置为在加载时观察页面突变。

为此,应在页面加载之前配置MutationObserver。

使用selenium-chromedriver,找不到为此目的注入JS的方法。

我知道chrome扩展程序可以做到这一点,但扩展程序无法在无头模式下工作。

那就是问题所在。


问题答案:

通过调用DevTool API可以实现 Page.addScriptToEvaluateOnNewDocument

from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebDriver
import json

def send(driver, cmd, params={}):
  resource = "/session/%s/chromium/send_command_and_get_result" % driver.session_id
  url = driver.command_executor._url + resource
  body = json.dumps({'cmd': cmd, 'params': params})
  response = driver.command_executor._request('POST', url, body)
  if response['status']:
    raise Exception(response.get('value'))
  return response.get('value')

def add_script(driver, script):
  send(driver, "Page.addScriptToEvaluateOnNewDocument", {"source": script})

WebDriver.add_script = add_script


# launch Chrome
driver = webdriver.Chrome()

# add a script which will be executed when the page starts loading
driver.add_script("""
  if (window.self === window.top) { // if main document
    console.log('add script');
  }
  """)

# load a page
driver.get("https://stackoverflow.com/questions")


 类似资料:
  • 我想用nodejs中的webdriver来控制一个使用ajax的网站,特别是它总是对服务器有http请求。 我还试图通过按浏览器窗口上的ESC来停止连接。之后,似乎可以立即运行。但我在WebDriver API中没有找到类似的函数。 那么有没有办法解决这个问题呢?任何一种都可以,比如: 无论页面是否加载,立即运行; 类似的webdriver api可以停止页面中的所有活动连接。 https://g

  • 我正在使用Selenium2.20WebDriver用C#创建和管理一个firefox浏览器。要访问页面,我使用以下代码,在访问URL之前设置驱动超时: 问题是,有时加载页面需要花费很长时间,使用selenium WebDriver加载页面的默认超时时间似乎是30秒,这太长了。并且我认为我设置的超时不适用于使用GoToUrl()方法加载页面。 所以我试图弄清楚如何设置页面加载的超时,然而,我找不到

  • 我在谷歌上搜索了几个小时,但我找不到任何正确的答案!

  • 问题内容: 我正在使用Selenium python Webdriver来浏览某些页面。我想在加载和执行任何其他Javascript代码之前向页面中注入JavaScript代码。另一方面,我需要将我的JS代码作为该页面的第一个JS代码执行。Selenium有办法做到吗? 我用谷歌搜索了几个小时,但找不到合适的答案! 问题答案: 如果您无法修改页面内容,则可以使用代理或在浏览器中安装的扩展程序中使用

  • 问题内容: 在我的手机网站上。我一直在尝试加载Adsense Mobile广告,但是在页面加载后,它们继续占据整个页面。 我确实发现,如果我禁用了ajax,则该页面将与广告一起很好地加载。这仅在我加载的第二页上有效,因为我单击了带有标签的链接… 这样可以使下一页完美加载。 问题 :由于启用了Ajax,我认为adsense广告会覆盖加载的第一页。 基本上我页面的第一部分是这样的… 我确实尝试禁用代码

  • 我尝试遵循return((JavascriptExecutor)driver.executescript(“return document.readystate”).equals(“complete”); 但它不起作用 基本上,上面的命令不能识别以下操作[testng]1535139249496 addons.productaddons信息发送请求到:https://aus5.mozilla.or