selenium firefox Не удалось найти окно

Я использую ssh-соединение с сервером и не могу найти окно с помощью selenium3.4 и firefox56. не смог найти решение, заметил, что это в основном ошибка IE с кодом селена: я

mport bs4 as bs
from bs4 import BeautifulSoup
import urllib.request
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import re
from random import randint
import pandas as pd
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from pyvirtualdisplay import Display


def get_soup(url):
    sauce = urllib.request.urlopen(url)
    return BeautifulSoup(sauce, 'lxml')


def get_driver_soup(url):
    # driver = webdriver.Firefox(executable_path='/usr/bin/geckodriver')
    display = Display(visible=0, size=(800, 600))
    display.start()
    driver = webdriver.Firefox('/var/gecodriver19-64')
    driver.get(url)
    try:
        element = WebDriverWait(driver, 20).until(
            EC.presence_of_element_located((By.CLASS_NAME, "product-image-wrapper"))
        )
    finally:
        soup = BeautifulSoup(driver.page_source, 'lxml')
        time.sleep(randint(30, 70))
        driver.quit()
        return soup

Полная трассировка::

Traceback (most recent call last):
  File "jomashop.py", line 86, in <module>
    soup = get_driver_soup(companies_list[x] + page_suffix)
  File "jomashop.py", line 32, in get_driver_soup
    soup = BeautifulSoup(driver.page_source, 'lxml')
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 587, in page_source
    return self.execute(Command.GET_PAGE_SOURCE)['value']
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 311, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/errorhandler.py", line 237, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchWindowException: Message: Unable to locate window

person Amittai Aharoni    schedule 10.12.2017    source источник
comment
Можете ли вы опубликовать полную трассировку ..   -  person johnashu    schedule 10.12.2017
comment
где он находится?   -  person Amittai Aharoni    schedule 10.12.2017
comment
Да, чтобы мы могли видеть строку, в которой возникает ошибка.   -  person johnashu    schedule 10.12.2017
comment
Обычно страница загружается очень долго. Или иногда ваш IP-адрес может быть заблокирован, если вы делаете много звонков   -  person johnashu    schedule 10.12.2017
comment
добавлена ​​трассировка. Я не думаю, что это проблема, потому что я работал с этим сайтом раньше.   -  person Amittai Aharoni    schedule 10.12.2017
comment
Возможно, сегодня есть дополнительный трафик.. попробуйте большое значение, подождите, например, 100. Чтобы проверить   -  person johnashu    schedule 10.12.2017
comment
но вы уверены, что это не проблема с моим кодом? вы видели «nowindowexception» раньше?   -  person Amittai Aharoni    schedule 10.12.2017
comment
Да, я видел ошибку, и обычно это происходит из-за тайм-аута. Однако, глядя на ваш код. ошибка находится в строке BeautifulSoup. Я предоставил вам возможный ответ   -  person johnashu    schedule 10.12.2017


Ответы (3)


Возможно, истекло время ожидания, когда вы пытаетесь использовать драйвер Selenium для возврата исходного HTML.

Вместо этого:

finally:
    soup = BeautifulSoup(driver.page_source, 'lxml')

Вместо этого попробуйте использовать запросы:

import requests

finally:
    r = requests.get(url) 
    html_bytes = r.text 
    soup = BeautifulSoup(html_bytes, 'lxml') 

Это должно тянуть только html

person johnashu    schedule 10.12.2017
comment
возвращает :selenium.common.exceptions.WebDriverException: Сообщение: соединение отклонено - person Amittai Aharoni; 10.12.2017
comment
Это означает, что сервер, по-видимому, блокирует ваш IP-адрес. Код, который я разместил, не использует Selenium, поэтому эта ошибка более чем вероятна из строки ......WebDriverWait(driver, 20)...... . - person johnashu; 10.12.2017
comment
посмотрите здесь .. может быть, это актуально .. ... stackoverflow.com/questions/39547598/ - person johnashu; 10.12.2017
comment
WebDriverWait правильный, работал локально. Перестал работать по ssh - person Amittai Aharoni; 10.12.2017
comment
Я думаю, что это будет удаленный сервер.. иногда они могут забанить вас примерно на 30 минут.. иногда навсегда.. вам действительно нужно попробовать скрипт на совершенно другом веб-сайте, чтобы убедиться, что это не сервер. - person johnashu; 10.12.2017

Проверьте файл geckodriver.log (должен находиться в том же каталоге, что и файл python).

Если он говорит

Error: GDK_BACKEND does not match available displays 

затем установите pyvirtualdisplay:

 pip install pyvirtualdisplay selenium

Вам также может понадобиться xvfb:

 sudo apt-get install xvfb

Затем попробуйте добавить этот код:

from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start() 

Полный пример:

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(800, 600))
display.start()

driver = webdriver.Firefox()
driver.get('http://www.python.org')

driver.close()
person johnashu    schedule 10.12.2017

Ошибка говорит сама за себя:

NoSuchWindowException: Message: Unable to locate window

Измените строку:

driver = webdriver.Firefox('/var/gecodriver19-64')

To :

driver = webdriver.Firefox(executable_path='/var/gecodriver19-64/geckodriver')
person DebanjanB    schedule 11.12.2017