我可以使用Selenium-webdriver for Ruby自动执行Chrome请求阻止吗?

cen*_*all 4 ruby selenium network-programming google-chrome browser-automation

我是一名质量检查自动化分析师,负责测试多平台在线银行应用程序。对于我们的自动化测试,我们将RubyMine套件与Gherkin / Cucumber,Ruby脚本步骤以及Selenium-webdriver,Watir和页面对象gem /库一起使用。

我有很多脚本,如果没有人工干预就无法完全自动化,其中包括通过Telerik Fiddler阻止某些网络调用以生成警告页面或错误消息等。我们自动化的未来将是通过RubyMine而不是Fiddler来实现。用于网络阻止。我知道有一种方法可以在Chrome中使用Inspect Element和“网络”菜单中的启用请求阻止功能来执行此操作。但是,我无法找到一种方法来强制Chrome浏览器通过Ruby / Selenium阻止给定的请求。唯一的方法是自己手动执行操作,因此我实际上无法根据需要自动执行这些操作。

所以,我的问题-这是否有可能使用Selenium-webdriver自动执行请求阻止?而且,如果是这样,我应该从哪里开始寻求帮助?

谢谢。

Dav*_*kin 8

它没有很好的文档记录,但您也可以通过将 host-resolver-rules 选项传递给 chrome 并将域映射到 localhost 或无效 IP 来实现请求阻塞。这样的事情应该适合你:

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--host-resolver-rules=MAP www.google-analytics.com 127.0.0.1')
driver = Selenium::WebDriver.for :chrome, options: options
Run Code Online (Sandbox Code Playgroud)


Ret*_*ius 8

对于那些想知道的人来说,python 版本只是:

driver.execute_cdp_cmd('Network.setBlockedURLs', {"urls": ["www.baidu.com"]})
driver.execute_cdp_cmd('Network.enable', {})
Run Code Online (Sandbox Code Playgroud)


Flo*_* B. 5

要使用DevTool API阻止URL使用Selenium加载:

def send_cmd(driver, cmd, params={})
  bridge = driver.send(:bridge)
  resource = "session/#{bridge.session_id}/chromium/send_command_and_get_result"
  response = bridge.http.call(:post, resource, {'cmd':cmd, 'params': params})
  raise response[:value] if response[:status]
  return response[:value]
end

send_cmd(driver, "Network.setBlockedURLs", {'urls': ["*"]})
send_cmd(driver, "Network.enable")
Run Code Online (Sandbox Code Playgroud)


Sat*_*ish 1

尝试https://github.com/lightbody/browsermob-proxy

我不知道它是否可以满足您的要求,因为我不是网络专家,我确​​实广泛使用 browsermob-proxy 和 selenium 来捕获网络请求,并且有一种方法可以将某些请求列入黑名单

https://browsermob-proxy-py.readthedocs.io/en/stable/client.html#browsermobproxy.Client.blacklist

如何禁用在 seleniumlibrary/robotframework 上加载外部 URL