如何以编程方式解决用于抓取网站数据的机器人检测问题?
How to programmatically get around a robot detection question for data scraping a website?
我有一个 excel sheet 在第一列中包含名称,在第三列中包含组织。
根据这个 excel sheet 中的名字,应该从这个 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中有一个问题,在访问数据之前证明不是机器人。
我应该如何自动传递它,然后抓取电子邮件?
你遇到的障碍是有意制造的,恰恰是为了阻止你试图做的事情;即自动使用该网络访问数据。
即使您确实找到了一种以编程方式绕过某些特别想阻止程序这样做的方法(我想 Whosebug 上没有人会帮助您),这样做显然有悖于网络存在的意义意味着。
我假设您问这个问题是因为您没有意识到这一点,因此认为这是您问题的答案。即使你没有意识到你的问题是关于理解障碍的目的,简单地不尝试仍然是你问题的解决方案。
简而言之:
网站所有者不希望您尝试这样做。
你应该做的是停止尝试。
解决网站验证码测试 https://directory.gatech.edu/ using you can use the following :
代码块:
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)))
浏览器快照:
更新
在名字字段中将姓名设置为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)))
浏览器快照:
我有一个 excel sheet 在第一列中包含名称,在第三列中包含组织。
根据这个 excel sheet 中的名字,应该从这个 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中有一个问题,在访问数据之前证明不是机器人。
我应该如何自动传递它,然后抓取电子邮件?
你遇到的障碍是有意制造的,恰恰是为了阻止你试图做的事情;即自动使用该网络访问数据。
即使您确实找到了一种以编程方式绕过某些特别想阻止程序这样做的方法(我想 Whosebug 上没有人会帮助您),这样做显然有悖于网络存在的意义意味着。
我假设您问这个问题是因为您没有意识到这一点,因此认为这是您问题的答案。即使你没有意识到你的问题是关于理解障碍的目的,简单地不尝试仍然是你问题的解决方案。
简而言之:
网站所有者不希望您尝试这样做。
你应该做的是停止尝试。
解决网站验证码测试 https://directory.gatech.edu/ using
代码块:
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)))
浏览器快照:
更新
在名字字段中将姓名设置为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)))
浏览器快照: