Selenium - ChromeOptions без головы игнорируя цикл "В то время как?" - PullRequest
0 голосов
/ 23 сентября 2018

Натыкаясь на эту странную проблему.Не совсем уверен, как ее решить!

Когда я добавляю

options = webdriver.ChromeOptions()
options.add_argument('headless')

в мой код, он игнорирует последующий цикл while.

Вот мой полный код, вверхдо конца скрипта: (с отредактированным URL)

import csv
from bs4 import BeautifulSoup
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('headless')



    driver = webdriver.Chrome()
    driver.get("SomeURL")
    button = driver.find_element_by_id('show_more')
    count = 1
    while count > 0:
        button.click()
        count = count + 1
        time.sleep(2)
        if count == 50000:
            break

soup = BeautifulSoup(driver.page_source, 'html.parser')



 img_data = []
 for img_tag in soup.find_all('img'):
     data_dict = dict()
     data_dict['image_name'] = img_tag['alt']
     data_dict['image_url'] = img_tag['src']
     img_data.append(data_dict)

with open('osprey.csv', 'w', newline='') as birddata:
     fieldnames = ['image_name', 'image_url']
     writer = csv.DictWriter(birddata, fieldnames=fieldnames)
     writer.writeheader()
     for data in img_data:
         writer.writerow(data)

Приведенный выше код выполняется без заголовка, но возвращает только 30 результатов и записывает в CSV.(пока цикл не обрабатывается).Когда:

options = webdriver.ChromeOptions() options.add_argument('headless')

удалено, а driver = webdriver.Chrome(options=options) изменено на driver = webdriver.Chrome(), процесс работает и возвращает более 10000 результатов и записывает в CSV, но не без заголовка и занимаетдолгое время для загрузки изображений страницы.

Я собираю миллионы изображений, поэтому мне действительно нужно, чтобы это было безголовым для эффективности.Любые советы о том, как держать его без головы, продолжая работать мой цикл, были бы фантастическими.

TIA!- Ура!

1 Ответ

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

Вы должны установить его как показано ниже

driver = webdriver.Chrome(chrome_options=options)

см. :

def to_capabilities(self):
    """
        Creates a capabilities with all the options that have been set and
        returns a dictionary with everything
    """
    caps = self._caps
    chrome_options = self.experimental_options.copy()
    chrome_options["extensions"] = self.extensions
    if self.binary_location:
        chrome_options["binary"] = self.binary_location
    chrome_options["args"] = self.arguments
    if self.debugger_address:
        chrome_options["debuggerAddress"] = self.debugger_address

    caps[self.KEY] = chrome_options
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...