Selenium на linux сервере не может обойти вход в систему, но работает на локальной машине - PullRequest
1 голос
/ 22 апреля 2020

У меня есть скрипт python, который использует селен для входа на определенный сайт. Но после ввода учетных данных corrent панель мониторинга не пропустит сценарий до go. Вместо этого он дает нам «403: запрещенная ошибка». Странно то, что он работает на моей локальной машине, но такое поведение происходит только на сервере Digital Ocean.

Это код, который я создал:

chrome_options = Options()
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36'
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--headless")
chrome_options.add_argument(f'--user-agent={user_agent}')

PROXY = proxies[10].get_address()
webdriver.DesiredCapabilities.CHROME['proxy'] = {
    "httpProxy": PROXY,
    "ftpProxy": PROXY,
    "sslProxy": PROXY,
    "proxyType": "MANUAL",

}

driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', options=chrome_options)

pickle.dump(driver.get_cookies(), open("cookies.pkl", "wb"))
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    });

    if (window.self === window.top) { // if main document
        console.log('add script');
      }
  """
})

driver.get("https://ahrefs.com/user/login")
wait = WebDriverWait(driver, 30)
cookies = pickle.load(open("cookies.pkl", "rb"))

for cookie in cookies:
    driver.add_cookie(cookie)

"""
  3. Fill in the username and password, then click the login button.
"""
try:
    wait.until(EC.element_to_be_clickable((By.ID, "email_input")))
    email = driver.find_element_by_id('email_input')
    password_ = driver.find_element_by_name('password')
    login_btn = driver.find_element_by_id('SignInButton')
    login_form = driver.find_element_by_id('formLogin')

    # TEST-ACCOUNT
    email.send_keys('{email_address}')
    password_.send_keys('{password}')

    login_btn.click()
    driver.save_screenshot(os.path.join(project_dir, 'login-checking.png'))
except TimeoutError as e:
    driver.close()
    driver.quit()

print("Successfully logged in..")
time.sleep(10.0)
driver.get('https://ahrefs.com/batch-analysis')
print(driver.current_url)
driver.save_screenshot(os.path.join(project_dir, 'login-ok.png'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...