我正在为McMaster-Carr编写爬虫。例如,页面https://www.mcmaster.com/98173A200,如果我直接在浏览器中打开页面,则可以查看所有产品数据。
因为数据是动态加载的内容,所以我使用的是Selenium + bs4。
if __name__ == "__main__":
url = "https://www.mcmaster.com/98173A200"
options = webdriver.ChromeOptions()
options.add_argument("--enable-javascript")
driver = webdriver.Chrome("C:/chromedriver/chromedriver.exe", options=options)
driver.set_page_load_timeout(20)
driver.get(url)
soup = BeautifulSoup(driver.page_source, "html.parser")
delay = 20
try:
email_input = WebDriverWait(driver, delay).until(
EC.presence_of_element_located((By.ID, 'MainContent')))
except TimeoutException:
print("Timeout loading DOM!")
print(soup)
但是,如果运行代码,我将得到一个login dialog,而如果直接在我提到的浏览器中打开此页面,则不会得到access restricted。
我还尝试使用下面的代码登录
try:
email_input = WebDriverWait(driver, delay).until(
EC.presence_of_element_located((By.ID, 'Email')))
print("Page is ready!!")
input("Press Enter to continue...")
except TimeoutException:
print("Loading took too much time!")
email_input.send_keys(email)
password_input = driver.find_element_by_id('Password')
password_input.send_keys(password)
login_button = driver.find_element_by_class_name("FormButton_primaryButton__1kNXY")
login_button.click()
然后显示errors。
我将Selenium打开的页面中的请求标头与浏览器中的页面进行了比较,我没有发现任何错误。我还尝试了其他Webdriver,例如PhantomJS和FireFox,得到的结果相同。
我还尝试使用下面的代码使用随机用户代理
from random_user_agent.user_agent import UserAgent
from random_user_agent.params import SoftwareName, OperatingSystem
software_names = [SoftwareName.CHROME.value]
operating_systems = [OperatingSystem.WINDOWS.value, OperatingSystem.LINUX.value]
user_agent_rotator = UserAgent(software_names=software_names,
operating_systems=operating_systems,
limit=100)
user_agent = user_agent_rotator.get_random_user_agent()
chrome_options = Options()
chrome_options.add_argument('user-agent=' + user_agent)
还是一样的结果。
Selenium打开的页面中的开发人员工具显示有一堆Python Docs。我想令牌授权是解决此问题的关键,但我不知道该怎么办。
任何帮助将不胜感激!
答案 0 :(得分:1)