Here is my code. Works perfectly on local machine but in pythonanywhere I am getting this error.
Code:
from seleniumbase import Driver
driver = Driver(uc=True, headless=True, no_sandbox=True, disable_gpu=True)
try:
driver.get('https://google.com/')
print("Page title was '{}'".format(driver.title))
finally:
driver.quit()
Error:
Traceback (most recent call last):
File "/home/mefor/.local/lib/python3.10/site-packages/seleniumbase/core/browser_launcher.py", line 3478, in get_local_driver
driver = undetected.Chrome(
File "/home/mefor/.local/lib/python3.10/site-packages/seleniumbase/undetected/__init__.py", line 312, in __init__
super().__init__(options=options, service=service_)
File "/home/mefor/.local/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 45, in __init__
super().__init__(
File "/home/mefor/.local/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 61, in __init__
super().__init__(command_executor=executor, options=options)
File "/home/mefor/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 208, in __init__
self.start_session(capabilities)
File "/home/mefor/.local/lib/python3.10/site-packages/seleniumbase/undetected/__init__.py", line 448, in start_session
super().start_session(capabilities)
File "/home/mefor/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 292, in start_session
response = self.execute(Command.NEW_SESSION, caps)["value"]
File "/home/mefor/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 347, in execute
self.error_handler.check_response(response)
File "/home/mefor/.local/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 229, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot connect to chrome at 127.0.0.1:9222
from chrome not reachable
Stacktrace:
#0 0x55bb84c92e89 <unknown>
Before I tried directly undetected_chromedriver it was giving same error too. import undetected_chromedriver as uc
options = uc.ChromeOptions()
options.add_argument("--disable-extensions")
options.add_argument('--disable-application-cache')
options.add_argument('--disable-gpu')
options.add_argument("--no-sandbox")
options.add_argument("--headless")
options.add_argument("--disable-setuid-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--incognito")
driver = uc.Chrome(options=options)
with driver:
driver.get('https://google.com')
This code works in pythonanywhere
from sbvirtualdisplay import Display
from seleniumbase import Driver
display = Display(visible=0, size=(1440, 1880))
display.start()
driver = Driver(uc=True, headless=False, incognito=True)
try:
driver.uc_open_with_reconnect("https://google.com/", 3)
finally:
driver.quit()
display.stop()
Use
SB()instead ofDriver()so that you get the built-in virtual display that you need when running on a Linux Server that has no GUI:(Otherwise you'll need to use https://github.com/mdmintz/sbVirtualDisplay)
If for some reason
xvfb=Truedidn't work for you, useheadless2=Trueinstead. From all the Linux environments I've seen, eitherxvfb=TrueORheadless2=Truedoes the trick when using theSB()format.If you're sticking with the
Driver()format, then know how to usesbvirtualdisplaycorrectly:(That overrides the default headless mode on Linux and forces your script to go through the virtual display instead.)
Also note that sometimes,
WebDriverException: Message: unknown error: cannot connect to chrome at 127.0.0.1:9222 from chrome not reachablemeans that Chrome wasn't installed on the machine already. If that's the case, make sure that Chrome gets installed first.