I have a small seleniumbase parser which works fine with a list of auth proxies on Windows. After deploying it on ubuntu server, the code crashed with an exception:
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot connect to chrome at 127.0.0.1:хххх from chrome not reachable
The sample code is as follows:
from seleniumbase import Driver
proxy = LOGIN:PASSWORD@IP:PORT
def get_browser():
browser = Driver(
uc=True,
undetectable=True,
headless=True,
proxy=proxy
)
return browser
browser = get_browser()
browser.open(WEBSITE)
Without a proxy the parser works OK. I'd appreciate any clues as to what to fix in the code.
SeleniumBase's proxy-with-auth solution uses https://stackoverflow.com/a/35293284/7058266, which generates a Chrome extension at runtime for the proxy details. However, regular headless mode in Chrome doesn't support extensions. Although there is a newer headless mode for Chrome that does support extensions (https://stackoverflow.com/a/73840130/7058266), the optimal solution for SeleniumBase UC Mode to remain undetected in an Ubuntu environment with no display requires using a virtual display (https://stackoverflow.com/a/23447450/7058266).
SeleniumBase has its own modified version of pyvirtualdisplay
called sbvirtualdisplay
(https://github.com/mdmintz/sbVirtualDisplay). Just wrap your code with it. Here's an example
from sbvirtualdisplay import Display
from seleniumbase import Driver
display = Display(visible=0, size=(1440, 1880))
display.start()
driver = Driver(uc=True, proxy="USER:PASSWORD@IP:PORT")
driver.uc_open_with_reconnect("https://pixelscan.net/", reconnect_time=10)
# ...
driver.quit()
display.stop()
Since headless
mode is the default mode on Linux, add headed=True
to override that if the above doesn't work.