Как программно обойти вопрос обнаружения робота для очистки данных веб-сайта? - PullRequest
1 голос
/ 26 февраля 2020

У меня есть лист Excel, содержащий имена в первом столбце и организацию в 3-м столбце.
Исходя из имен из этого листа Excel, электронные письма должны быть удалены с этого URL:
https://directory.gatech.edu/

Я использую селен.
Я написал скрипт:

import selenium.webdriver

def scrape(name):        
    url = 'https://directory.gatech.edu/'

    driver = selenium.webdriver.Chrome(("mypython/bin/chromedriver_linux64/chromedriver"))
    driver.get(url)

    driver.find_element_by_xpath('//*[@id="edit-search"]').send_keys(name)
    driver.find_element_by_xpath('//*[@id="edit-submit"]"]').click()


# --- main ---                                                      
scrape("Tariq")

Но в этом URL есть вопрос, чтобы доказать, что вы не робот, прежде чем получить доступ к данным.
Как мне автоматически передать это, чтобы потом переписывать почту?

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Для выполнения теста капчи на веб-сайте https://directory.gatech.edu/ с использованием Селен вы можете использовать следующие Стратегии локатора :

  • Блок кода:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('https://directory.gatech.edu/')
    my_string = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label[for='edit-captcha-test']"))).get_attribute("innerHTML")
    chars = my_string.split()[:3]
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[id='edit-captcha-test']"))).send_keys(eval(' '.join(str(x) for x in chars)))
    
  • Снимок браузера:

captcha_test


Обновление

Чтобы установить имя как Tariq в поле Имя и выполнить тест капчи Вы можете использовать следующее решение:

  • Блок кода:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('https://directory.gatech.edu/')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#edit-firstname"))).send_keys("Tariq")
    my_string = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label[for='edit-captcha-test']"))).get_attribute("innerHTML")
    chars = my_string.split()[:3]
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[id='edit-captcha-test']"))).send_keys(eval(' '.join(str(x) for x in chars)))
    
  • Снимок браузера:

tariq

1 голос
/ 26 февраля 2020

То, с чем вы сталкиваетесь как препятствие, - это то, что было создано намеренно, чтобы точно предотвратить то, что вы пытаетесь сделать; то есть автоматически использовать этот веб-доступ к данным.

Даже если вы находите способ программно обойти что-то, что особенно мешает программам (я думаю, никто в StackOverflow не поможет вам в этом), это явно противоречит тому, что это веб-присутствие предназначен для.

Я предполагаю, что вы спросили, потому что вы не поняли этого и, следовательно, считаете это ответом на вашу проблему. Даже если вы не понимаете, что ваша проблема заключается в понимании цели препятствия, ваша проблема - это просто попытка не попробовать.

Короче говоря: то, что вы пытаетесь сделать, нежелательно для владельцев сайтов. .
Что вам следует сделать, это перестать пытаться.

...