Моя цель состоит в том, чтобы выполнить скрипт, который я использовал ранее в 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. Вещи, которые я пробовал:
- замена файла .exe эквивалентным файлом linux.
- загрузка Wine компьютера для запуска .exe при его вызове. кое-что об этом ... после установки wine я щелкнул правой кнопкой мыши по исполняемому файлу, чтобы открыть его с wine, и wine не был доступен, и не было возможности искать его на компьютере.
- Я видел и пробовалотсюда опции сервера linux Как реализовать chromedriver в селене на платформе Linux
- прокручивая на 3/4 вниз по этой странице, они закодировали в Javascript что-то, что, очевидно, работает для Java .. здесья не уверен, как редактировать мой код Python аналогичным образом. https://tecadmin.net/setup-selenium-chromedriver-on-ubuntu/
- Я меняю путь и занимаюсь исследованиями, но в основном я думаю, что проблема в том, что я не знаю, как изменить свой кодчтобы это работало на 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 со строкой, указанной в качестве старого каталога, я обнаружил, что все остальные строки кода изменили их, и это работает.