Webdriver error handling and use native files

This commit is contained in:
Salastil
2025-07-06 23:23:12 -04:00
parent e06d34b34c
commit ac65d537ee

View File

@@ -135,76 +135,80 @@ class Twitter_Scraper:
self.router = self.go_to_home self.router = self.go_to_home
pass pass
def _get_driver( def _get_driver(self, proxy=None):
self,
proxy=None,
):
print("Setup WebDriver...") print("Setup WebDriver...")
# header = Headers().generate()["User-Agent"]
# User agent of a andoird smartphone device header = (
header="Mozilla/5.0 (Linux; Android 11; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5414.87 Mobile Safari/537.36" "Mozilla/5.0 (Linux; Android 11; SM-G998B) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
# browser_option = ChromeOptions() "Chrome/109.0.5414.87 Mobile Safari/537.36"
browser_option = FirefoxOptions()
browser_option.add_argument("--no-sandbox")
browser_option.add_argument("--disable-dev-shm-usage")
browser_option.add_argument("--ignore-certificate-errors")
browser_option.add_argument("--disable-gpu")
browser_option.add_argument("--log-level=3")
browser_option.add_argument("--disable-notifications")
browser_option.add_argument("--disable-popup-blocking")
browser_option.add_argument("--user-agent={}".format(header))
if proxy is not None:
browser_option.add_argument("--proxy-server=%s" % proxy)
# Option to hide browser or not
# If not yes then skips the headless
if self.headlessState == 'yes':
# For Hiding Browser
browser_option.add_argument("--headless")
try:
# print("Initializing ChromeDriver...")
# driver = webdriver.Chrome(
# options=browser_option,
# )
print("Initializing FirefoxDriver...")
driver = webdriver.Firefox(
options=browser_option,
) )
print("WebDriver Setup Complete") def create_firefox_driver():
return driver firefox_options = FirefoxOptions()
except WebDriverException: firefox_options.add_argument("--no-sandbox")
try: firefox_options.add_argument("--disable-dev-shm-usage")
# print("Downloading ChromeDriver...") firefox_options.add_argument("--ignore-certificate-errors")
# chromedriver_path = ChromeDriverManager().install() firefox_options.add_argument("--disable-gpu")
# chrome_service = ChromeService(executable_path=chromedriver_path) firefox_options.add_argument("--log-level=3")
firefox_options.add_argument("--disable-notifications")
firefox_options.add_argument("--disable-popup-blocking")
firefox_options.add_argument(f"--user-agent={header}")
if proxy:
firefox_options.add_argument(f"--proxy-server={proxy}")
if self.headlessState in ["yes", "true"]:
firefox_options.add_argument("--headless")
print("Downloading FirefoxDriver...") # Fix Invalid Host header: force IPv4
firefoxdriver_path = GeckoDriverManager().install() firefox_options.set_preference("network.dns.disableIPv6", True)
print("Initializing FirefoxDriver with system binary...")
firefoxdriver_path = "/usr/bin/geckodriver" # Native geckodriver
firefox_service = FirefoxService(executable_path=firefoxdriver_path) firefox_service = FirefoxService(executable_path=firefoxdriver_path)
# print("Initializing ChromeDriver...") driver = webdriver.Firefox(service=firefox_service, options=firefox_options)
# driver = webdriver.Chrome( print("Firefox WebDriver Setup Complete")
# service=chrome_service,
# options=browser_option,
# )
print("Initializing FirefoxDriver...")
driver = webdriver.Firefox(
service=firefox_service,
options=browser_option,
)
print("WebDriver Setup Complete")
return driver return driver
except Exception as e:
print(f"Error setting up WebDriver: {e}") def create_chrome_driver():
chrome_options = ChromeOptions()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--ignore-certificate-errors")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--log-level=3")
chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument("--disable-popup-blocking")
chrome_options.add_argument(f"--user-agent={header}")
# Use Arch Chromium binary
chrome_options.binary_location = "/usr/sbin/chromium"
if proxy:
chrome_options.add_argument(f"--proxy-server={proxy}")
if self.headlessState in ["yes", "true"]:
chrome_options.add_argument("--headless")
print("Initializing ChromeDriver with system binary...")
chromedriver_path = "/usr/bin/chromedriver" # Native chromedriver
chrome_service = ChromeService(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=chrome_service, options=chrome_options)
print("Chrome WebDriver Setup Complete")
return driver
try:
driver = create_firefox_driver()
return driver
except Exception as firefox_error:
print(f"Firefox WebDriver failed: {firefox_error}")
print("Attempting Chromium fallback...")
try:
driver = create_chrome_driver()
return driver
except Exception as chrome_error:
print(f"Error setting up Chrome WebDriver: {chrome_error}")
sys.exit(1) sys.exit(1)
pass
def login(self): def login(self):
print() print()