我正在尝试阅读或与Chrome中的开发人员工具的网络和控制台标签进行交互。你能指导我如何实现这个目标。
由于
答案 0 :(得分:2)
简短的回答是否定的。 How to open Chrome Developer console in Selenium WebDriver using JAVA。由于提供的链接声明您无法直接访问chrome开发人员工具。
但如果您有兴趣访问浏览器控制台和网络标签的内容,selenium会为您提供一种方法。
System.setProperty("webdriver.chrome.driver", getChromeDriverLocation());
LoggingPreferences loggingprefs = new LoggingPreferences();
loggingprefs.enable(LogType.BROWSER, Level.WARNING);
loggingprefs.enable(LogType.PERFORMANCE, Level.WARNING);
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(CapabilityType.LOGGING_PREFS, loggingprefs);
driver = new ChromeDriver(capabilities);
然后,您可以根据需要打印日志
LogEntries logEntries = SeleniumBaseTest.getWebDriver().manage().logs()
.get(org.openqa.selenium.logging.LogType.BROWSER);
for (LogEntry entry : logEntries) {
System.out.println((String.format("%s %s %s\n", new Date(entry.getTimestamp()), entry.getLevel(),
entry.getMessage())));
}
LogType.BROWSER
将为您提供browser console
。
Logtype.PERFROMANCE
将为您提供network tab
。
访问网络标签的其他方法是使用浏览器代理记录交易。 http://www.seleniumeasy.com/selenium-tutorials/browsermob-proxy-selenium-example
答案 1 :(得分:0)
在Python中,Pychrome可以很好地用作DevTools Protocol Viewer的接口。
下面是一个示例,我将Selenium用于主要请求和Pychrome混合使用,因为我想获得图像而不下载两次...
import base64
import pychrome
def save_image(file_content, file_name):
try:
file_content=base64.b64decode(file_content)
with open("C:\\Crawler\\temp\\" + file_name,"wb") as f:
f.write(file_content)
except Exception as e:
print(str(e))
def response_received(requestId, loaderId, timestamp, type, response, frameId):
if type == 'Image':
url = response.get('url')
print(f"Image loaded: {url}")
response_body = tab.Network.getResponseBody(requestId=requestId)
file_name = url.split('/')[-1].split('?')[0]
if file_name:
save_image(response_body['body'], file_name)
tab.Network.responseReceived = response_received
# start the tab
tab.start()
# call method
tab.Network.enable()
# get request to target the site selenium
driver.get("https://www.realtor.com/ads/forsale/TMAI112283AAAA")
# wait for loading
tab.wait(50)