Селен (аргумент - безголовый) + (марионетка = Ложь) - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь очистить страницы с помощью JavaScript, используя Python.Я новичок в этом, поэтому я прочитал много уроков.Наконец-то я обнаружил, что мне нужен селен, beautiful_soup и веб-драйвер firefox.Итак, я сделал функцию (я тоже добавляю соответствующие модули).

import bs4
import requests
from urllib.request import Request
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

def page_souping_js(url):
    options = Options()
    options.add_argument("--headless")
    driver = webdriver.Firefox(firefox_options=options)
    driver.get(url)
    complete_page = driver.page_source
    driver.close()
    page_soup = soup(complete_page,"html.parser")
    return page_soup

, который, казалось, работал нормально, пока я не попытался создать из него файл .exe (с помощью pyinstaller) и запустить его на другом компьютере (он прекрасно работает на моем компьютере), где я получил эту ошибку:

selenium.common.exceptions.SessionNotCreatedException: Сообщение: невозможно найти соответствующий набор возможностей

Итак, я прочитал еще раз на эту тему и "исправлено"мой код:

def page_souping_js(url):
    cap = DesiredCapabilities().FIREFOX
    cap["marionette"] = False
    options = Options()
    options.add_argument("--headless")
    driver = webdriver.Firefox(capabilities=cap, firefox_options=options)
    driver.get(url)
    complete_page = driver.page_source
    driver.close()
    page_soup = soup(complete_page,"html.parser")
    return page_soup

, так как я сделал это изменение, но браузер открывается, даже если я добавил аргумент" --headless ".1. Являются ли эти две возможности и firefox_options несовместимыми?2. если мне нужно установить "марионетку" в False, есть ли способ выполнить эту функцию без открытия браузера?Или есть другая проблема вокруг этой проблемы?

Надеюсь, у кого-то будет ответ на этот вопрос.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Хорошо, очевидно, эта проблема вызвана тем, что у пользователя была очень устаревшая версия firefox на его машине.Возможности не должны быть установлены на что-то, что не является значением по умолчанию, но браузер должен быть обновлен.

0 голосов
/ 29 мая 2018

Я не могу говорить о совместимости capabilites и firefox_options, но у меня был некоторый успех с этим:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from bs4 import BeautifulSoup

def page_souping_js(url):
    options = Options()
    options.set_headless(True)
    driver = webdriver.Firefox(firefox_options=options)
    driver.get(url)
    complete_page = driver.page_source
    driver.close()
    page_soup = BeautifulSoup(complete_page, "lxml")
    return page_soup

Это должно вернуть исходный html без открытия браузера.Установка этого через PyInstaller, похоже, также не вызывала каких-либо проблем.

Примечание: официальное заявление на импорт для BeautifulSoup (согласно официальной документации 1007 *) равно from bs4 import BeautifulSoup.

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