Webdriver error handling and use native files
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user