DevTools прослушивает ws: //127.0.0.1: 57671 / devtools / browser / 8a586f7c-5f2c-4d10-8174-7a7bf50e49b5 с Selenium и Python - PullRequest
0 голосов
/ 09 сентября 2018

Я использую 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)

Его также не войти в консоль. Кто-нибудь может подсказать в чем проблема?

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

На основе Chanticleer в скрыть консоль chromeDriver в python

В папке Python найдите и отредактируйте этот файл:

Lib\site-packages\selenium\webdriver\common\services.py

Отредактируйте функцию Start (), добавив флаги создания следующим образом: creationflags=CREATE_NO_WINDOW

from win32process import CREATE_NO_WINDOW

def start(self):
    """
    Starts the Service.

    :Exceptions:
     - WebDriverException : Raised either when it can't start the service
       or when it can't connect to the service
    """
    try:
        cmd = [self.path]
        cmd.extend(self.command_line_args())
        self.process = subprocess.Popen(cmd, env=self.env,
                                        close_fds=platform.system() != 'Windows',
                                        stdout=self.log_file, stderr=self.log_file, creationflags=CREATE_NO_WINDOW)
    except TypeError:
        raise

Это прекрасно работает для меня, используя python3.7 и selenium 3.141.0

0 голосов
/ 10 сентября 2018

DevTools прослушивает ws: //127.0.0.1: 9222 / devtools / browser /

@ AndreaCardaci в документации Загрузка URL-адреса в отдельном контексте указывает, что при использовании Google Chrome в режиме без головы :

Обычный пример кода запускается на новой одноразовой вкладке в отдельном контексте (воспринимается как профили инкогнито) каждый раз.

Как порядок получения версии браузера, начиная с Chrome 62, целевой URL-адрес браузера генерируется во время выполнения и может быть получен через конечную точку /json/version и откат к /devtools/browser, если нет.

Вот соответствующий код:

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 поле. Таким образом, в качестве альтернативы, если вы запускаете chrome с опцией --remote-debugging-port=0, оба port и endpoint записываются в файл DevToolsAcivePort в папке профиля браузера.

Заключение

Эта ошибка не влияет на @Test, и вы можете пока ее игнорировать.

...