как исправить ошибку исполняемого файла с помощью chromedriver Windows >>> при переходе на Ubuntu? - PullRequest
0 голосов
/ 07 октября 2019

Моя цель состоит в том, чтобы выполнить скрипт, который я использовал ранее в Windows, переведенный в chromedriver, и есть эта ошибка:

Blockquote selenium.common.exceptions.WebDriverException: >> Сообщение: 'chromedriver'исполняемый файл должен находиться в переменной PATH.

исполняемый файл Windows находится в переменной PATH и работает с окнами. Я заменил этот хром-драйвер современной версией хром-драйвера Linux, установил веб-браузер chrome в каталог по умолчанию. Кажется, он не распознает, что файл существует, и в коде не указано, что он ищет .exe.

Вот код

import scrapy
from ..items import AuctionscrapingItem
from selenium.webdriver.support.ui import 
WebDriverWait
from selenium.webdriver.support import 
expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import 
TimeoutException
from selenium.common.exceptions import 
NoSuchElementException
from scrapy.crawler import CrawlerProcess
import time
import re
from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from scrapy.settings import Settings
from auctionscraping import settings as my_settings
import mysql.connector
from datetime import datetime

class AuctionInt(scrapy.Spider):
    name = 'auction'
    start_urls = ['https://www.websitefunfirst.com/']


    def __init__(self):
        self.driver = webdriver.Chrome('/opt/lampp/htdocs/scrapy/chromedriver')
        self.driver.maximize_window()
        self.conn = mysql.connector.connect(
            host= 'localhost',
            user= 'root',
            passwd= '',
            database= 'auction'
        )

        self.curr = self.conn.cursor(buffered=True)
        self.curr.execute("""create table IF NOT EXISTS auction_tb(
            id int,
            web_name text,
            website text,
            name text,
            start text,
            end text,
            locations text,
            location_link text,
            remaining_time text,
            current_bid text,
            viewer text,
            premium text,
            image_urls text,
            bid text,
            starting_bid text,
            description text
        )""")
        self.curr.execute("""create table IF NOT EXISTS bid_history(
            id int NOT NULL,
            name varchar(50),
            bidder varchar(20) NOT NULL,
            bid_amount text,
            PRIMARY KEY (id,name,bidder)
        )""")
        try:
            self.curr.execute("""select id from auction_tb order by id desc limit 1""")
            last_id = self.curr.fetchone()
            self.id_no = last_id[0]
        except:
            self.id_no = 0
        f = open("/opt/lampp/htdocs/scrapy/result.txt", "w")
        f.write("scraping")
        f.close()
        self.clear_ended_item() 
         '''

в коде, я изменил каталог драйверов, чтобы он соответствовал ubuntu (измените xampp на lampp и предыдущие каталоги), и я добавил заполнитель длясайт соскоб. Эта часть скрипта и весь скрипт отлично работает на Windows. Вещи, которые я пробовал:

  1. замена файла .exe эквивалентным файлом linux.
  2. загрузка Wine компьютера для запуска .exe при его вызове. кое-что об этом ... после установки wine я щелкнул правой кнопкой мыши по исполняемому файлу, чтобы открыть его с wine, и wine не был доступен, и не было возможности искать его на компьютере.
  3. Я видел и пробовалотсюда опции сервера linux Как реализовать chromedriver в селене на платформе Linux
  4. прокручивая на 3/4 вниз по этой странице, они закодировали в Javascript что-то, что, очевидно, работает для Java .. здесья не уверен, как редактировать мой код Python аналогичным образом. https://tecadmin.net/setup-selenium-chromedriver-on-ubuntu/
  5. Я меняю путь и занимаюсь исследованиями, но в основном я думаю, что проблема в том, что я не знаю, как изменить свой кодчтобы это работало на Linux. ОБНОВЛЕНИЕ ***, как предложил Йосува А. Я использовал chmod + x в каталоге файлов на chromedriver, чтобы сделать файл исполняемым, если он еще не был, а затем дважды щелкнул файл, чтобы посмотреть, будет ли он выполняться, и получил это сообщение об ошибке.

не удалось отобразить «chromedriver».

не установлено приложение для файлов "общей библиотеки". Вы хотите найти приложение, чтобы открыть этот файл?

тип файла: общая библиотека (application / x-sharedlib), разрешение на выполнение теперь проверено в свойствах

ОБНОВЛЕНИЕ № 2: Как предложил Йосува А., я использовал пример скрипта из chromedriver (chromedriver.chromium.org/getting-started) и получил другую ошибку, но это ясно говорит о том, что он находит файл chromedriver.

selenium.common.exceptions.SessionNotCreatedException: Сообщение: сессия не> создана: эта версия ChromeDriver поддерживает только версию Chrome 78

Я ищу способ найти, какой у меня Chromeи загрузка хромдрайвера, чтобы соответствовать ему. Альтернативой может быть загрузка Chrome версии 78. Она выдает другую ошибку, как и раньше

обновление № 3: пример скрипта Chrome теперь работает, пробуя ту же строку кодирования с исходным файлом скрипта

обновление № 4 (через 10 минут): пример скрипта работает. Сценарий проекта не работает - появляется сообщение об ошибке

Blockquote selenium.common.exceptions.WebDriverException: >> Сообщение: исполняемый файл chromedriver должен находиться в переменной PATH.

обновление # 5: показывает командную строку во время запуска сканирования scrapy.

2019-10-10 00:28:29 [py.warnings] WARNING: 

/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/spiderloader.py:37: UserWarning: There are several spiders with the same name:

      Furgeson named 'auction' (in auctionscraping.spiders.auction_spyder)
      Hemingway named 'auction' (in auctionscraping.spiders.auction_spyder)
      Jeffersons named 'auction' (in auctionscraping.spiders.auction_spyder)
      End named 'auction' (in auctionscraping.spiders.auction_spyder)

      This can cause unexpected behavior.
      warnings.warn(msg, UserWarning)

    2019-10-10 00:28:29 [scrapy.crawler] INFO: Overridden settings: {'BOT_NAME': 'auctionscraping', 'NEWSPIDER_MODULE': 'auctionscraping.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['auctionscraping.spiders']}
    2019-10-10 00:28:29 [scrapy.extensions.telnet] INFO: Telnet Password: cef133d6b6822838
    2019-10-10 00:28:29 [scrapy.middleware] INFO: Enabled extensions:
    ['scrapy.extensions.corestats.CoreStats',
     'scrapy.extensions.telnet.TelnetConsole',
     'scrapy.extensions.memusage.MemoryUsage',
     'scrapy.extensions.logstats.LogStats']



 Note: error message comes up after the script has failed to run.. when i CTRL + C close the program this error:

> File "/home/disco/.conda/envs/success/bin/scrapy", line 11, in <module>
    sys.exit(execute())
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/cmdline.py", line 149, in execute
    cmd.crawler_process = CrawlerProcess(settings)
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/crawler.py", line 251, in __init__
    super(CrawlerProcess, self).__init__(settings)
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/crawler.py", line 137, in __init__
    self.spider_loader = _get_spider_loader(settings)
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/crawler.py", line 338, in _get_spider_loader
    return loader_cls.from_settings(settings.frozencopy())
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/spiderloader.py", line 61, in from_settings
    return cls(settings)
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/spiderloader.py", line 25, in __init__
    self._load_all_spiders()
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/spiderloader.py", line 47, in _load_all_spiders
    for module in walk_modules(name):
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/utils/misc.py", line 71, in walk_modules
    submod = import_module(fullpath)
  File "/home/disco/.conda/envs/success/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/opt/lampp/htdocs/scrapy/auctionscraping/auctionscraping/spiders/auction_spyder.py", line 576, in <module>
    f = open("opt/lampp/htdocs/scrapy/result.txt", "w")
FileNotFoundError: [Errno 2] No such file or directory: 'opt/lampp/htdocs/scrapy/result.txt'
Unhandled error in Deferred:
2019-10-10 00:44:07 [twisted] CRITICAL: Unhandled error in Deferred:

>Traceback (most recent call last):
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/crawler.py", line 172, in crawl
    return self._crawl(crawler, *args, **kwargs)
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/crawler.py", line 176, in _crawl
    d = crawler.crawl(*args, **kwargs)
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/twisted/internet/defer.py", line 1613, in unwindGenerator
    return _cancellableInlineCallbacks(gen)
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/twisted/internet/defer.py", line 1529, in _cancellableInlineCallbacks
    _inlineCallbacks(None, g, status)
--- <exception caught here> ---
  File "/opt/lampp/htdocs/scrapy/auctionscraping/auctionscraping/spiders/auction_spyder.py", line 571, in crawl
    yield runner.crawl(Jefferson)
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks
    result = g.send(result)
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/crawler.py", line 79, in crawl
    self.spider = self._create_spider(*args, **kwargs)
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/crawler.py", line 102, in _create_spider
    return self.spidercls.from_crawler(self, *args, **kwargs)
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/scrapy/spiders/__init__.py", line 51, in from_crawler
    spider = cls(*args, **kwargs)
  File "/opt/lampp/htdocs/scrapy/auctionscraping/auctionscraping/spiders/auction_spyder.py", line 408, in __init__
    self.driver = webdriver.Chrome('opt/lampp/htdocs/scrapy/chromedriver')
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__
    self.service.start()
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 83, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
2019-10-10 00:44:07 [twisted] CRITICAL: 
Traceback (most recent call last):
  File "/home/disco/.conda/envs/success/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 76, in start
    stdin=PIPE)
  File "/home/disco/.conda/envs/success/lib/python3.7/subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "/home/disco/.conda/envs/success/lib/python3.7/subprocess.py", line 1522, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'opt/lampp/htdocs/scrapy/chromedriver': 'opt/lampp/htdocs/scrapy/chromedriver'

обновление # 6: я обнаружил ошибку для файла .txt, изменил расположение этого файла и перенаправил его всценарий. я делаю это дальше для файла chromedriver.

обновление # 7: место расположения chromedriver должно быть / opt / lampp ... и оно было неправильно помечено как opt / lampp .. - с изменениями браузер открывается, но скрипт не запускается. Обычная пустая страница.

Теперь я думаю, что проблема с chromedriver была решена, и это было в основном неудобство с каталогом, так как каталог был указан в файле несколько раз, и первоначально я видел только одну строку в скрипте, где он отмечал каталог chromedriver. После использования Ctrl + F со строкой, указанной в качестве старого каталога, я обнаружил, что все остальные строки кода изменили их, и это работает.

1 Ответ

0 голосов
/ 10 октября 2019

С началом работы chromedriver было три основных момента:

  1. измените все старые каталоги на chromedriver на новый каталог, выполните глобальный поиск по текстовому файлу, используя CTRL + F,Важной частью этого является то, что когда я получил ошибку для chromedriver, он не показал, на какой строке он напечатал ошибку, поэтому, когда chromedriver вызывался снова со старым каталогом, который он пропустил при переходе на новый каталог, но приглашение все равно показывает, чтофайл chromedriver не может быть найден, остальные два раза вызываемый chromedriver каталог был задан как старый каталог - выдает ту же ошибку.

  2. Версия Mchromedriver совпадает с версией chrome. Это было обнаружено, среди других внешних ошибок, при запуске примера сценария со страницы учебника chromedriver, используйте расположение файла chromedriver программы, чтобы проверить, не является ли файл недоступным для поиска при использовании чистого сценария (сценарий учебника chromedriver).

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

...