一尘不染

DevTools使用Selenium和Python在ws://127.0.0.1:57671 / devtools / browser / 8a586f7c-5f2c-4d10-8174-7a7bf50e49b5上侦听

selenium

我正在使用python + selenium来实现网络浏览器的自动化,并得到此错误。

DevTools listening on ws://127.0.0.1:57671/devtools/browser/8a586f7c-5f2c-4d10-8174-7a7bf50e49b5
[5096:1196:0909/183254.362:ERROR:mf_helpers.cc(14)] Error in dxva_video_decode_accelerator_win.cc on line 517

当程序到达代码的这一部分时,就会出现问题:

def send_comments(driver):
    add_comments = driver.find_elements_by_class_name('add') 
    comments = driver.find_elements_by_xpath("//form[@class='addCommentexpand']//textarea[contains(@placeholder,'Add a comment')]") 
    submit_comments = driver.find_elements_by_xpath("//button[text()='Comment']")  
    i = 0
    for add, comment, submit in zip(add_comments, comments, submit_comments):
        print("comment begins")
        add.click()
        print("+add comment clicked")
        comment.click()
        print("comment textbox clicked")
        comment.send_comments("Amazing Art")
        print("text typed")
        submit.click()
        print("comment submited")
        i += 1
        if i > 5:
            driver.close()

send_comments(driver)

它也没有登录控制台。谁能说出问题所在?


阅读 569

收藏
2020-06-26

共1个答案

一尘不染

Devtools在ws://127.0.0.1:9222 / devtools / browser /上监听

文档中的@AndreaCardaci在 单独的上下文
加载URL
时提到 在无头模式下 使用 Google
Chrome时

普通的示例代码每次都在单独的上下文中的新的一次性标签中运行(将其视为隐身配置文件)。

为了从Chrome 62开始获取浏览器版本,浏览器目标URL是在运行时生成的,可以通过 /json/version 端点获取,
/devtools/browser 如果没有的话,可以回退到目标URL 。

以下是相关代码:

const CDP = require('chrome-remote-interface');

async function doInNewContext(action) {
    // fetch the browser version (since Chrome 62 the browser target URL is
    // generated at runtime and can be obtained via the '/json/version'
    // endpoint, fallback to '/devtools/browser' if not present)
    const {webSocketDebuggerUrl} = await CDP.Version();
    // connect to the DevTools special target
    const browser = await CDP({
        target: webSocketDebuggerUrl || 'ws://localhost:9222/devtools/browser'
    });
    // create a new context
    const {Target} = browser;
    const {browserContextId} = await Target.createBrowserContext();
    const {targetId} = await Target.createTarget({
        url: 'about:blank',
        browserContextId
    });
    // connct to the new context
    const client = await CDP({target: targetId});
    // perform user actions on it
    try {
        await action(client);
    } finally {
        // cleanup
        await Target.closeTarget({targetId});
        await browser.close();
    }
}

// this basically is the usual example
async function example(client) {
    // extract domains
    const {Network, Page} = client;
    // setup handlers
    Network.requestWillBeSent((params) => {
        console.log(params.request.url);
    });
    // enable events then start!
    await Promise.all([Network.enable(), Page.enable()]);
    await Page.navigate({url: 'https://github.com'});
    await Page.loadEventFired();
}

doInNewContext(example);

此外,按照获取浏览器目标URL(ws:// localhost:9222 / devtools / browser /
…)
的方式,可以http://127.0.0.1:9222/json/version
webSocketDebuggerUrl 字段中通过端点访问。所以,或者,如果您正在使用的选项启动铬--remote-debugging- port=0,无论 端口端点 被写入 DevToolsAcivePort 在浏览器配置文件夹文件。

结论

该错误不会影响您@Test,您可以暂时忽略该错误。

2020-06-26