【问题标题】:Python Selenium Chrome Driver - nseindia - getting 403Python Selenium Chrome 驱动程序 - nseindia - 得到 403
【发布时间】:2020-10-27 18:44:03
【问题描述】:

enter image description here

''' 尝试从 NSE 获取 Equity Derivatives 数据 https://www.nseindia.com/->Market 数据-> 衍生品市场 一直有效,直到点击操作,浏览器导航到衍生品市场,但随后访问 拒绝错误如下

 <h1>
   Access Denied
  </h1>
  You don't have permission to access "http://www.nseindia.com/market-data/equity-derivatives-watch" on this server.
  <p>
   Reference #18.386dcc17.1603823463.54b06d7
  </p>
'''

from selenium import webdriver
from selenium.webdriver import ActionChains
from bs4 import BeautifulSoup
import time

# Tried all possible options below

options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=options)

driver.get("https://www.nseindia.com/")

marketdata = driver.find_element_by_xpath("//*[@id='main_navbar']/ul/li[3]/a")
derivativesmarket = driver.find_element_by_xpath("//*[@id='main_navbar']/ul/li[3]/div/div[1]/div/div[1]/ul/li[3]/a")

actions = ActionChains(driver)
actions.move_to_element(marketdata).move_to_element(derivativesmarket).click().perform()

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
# soup = BeautifulSoup(html,'lxml')
time.sleep(7)

print(soup.prettify())[enter image description here][1]

【问题讨论】:

  • 服务器本身给你的访问权限是否被拒绝?

标签: python selenium selenium-chromedriver http-status-code-403


【解决方案1】:

添加

options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

并使用

 from selenium.webdriver.support.ui import WebDriverWait
 from selenium.webdriver.support import expected_conditions as EC

然后像这样访问元素:

WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "h1.h1")))

参考:-Access Denied You don't have permission to access "site" on this server using ChromeDriver and Chrome through Selenium Python

【讨论】:

  • 感谢您的回复阿布拉尔·艾哈迈德。它在 WebDriverWait 方法处超时。出现如下错误,第 34 行,在 WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "h1.h1"))) File "/Users/sandeepsangole/PycharmProjects/nse/venv /lib/python3.8/site-packages/selenium/webdriver/support/wait.py",第 80 行,直到引发 TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: 消息:
  • 我希望您已将 (By.CSS_SELECTOR, "h1.h1"))) 更改为您要查找的元素?
  • CSS_SELECTOR, "h1.h1") 来自另一个答案。您的页面上没有这样的元素,因此出现错误。您需要将其替换为您要查找的元素的选择器。
  • 修改代码如下,driver = webdriver.Chrome(chrome_options=options) driver.get("nseindia.com/") marketdata = driver.find_element_by_xpath("//*[@id='main_navbar'] /ul/li[3]/a") 衍生品市场 = driver.find_element_by_xpath("//*[@id='main_navbar']/ul/li[3]/div/div[1]/div/div[1] /ul/li[3]/a") actions = ActionChains(driver) actions.move_to_element(marketdata).move_to_element(derivativesmarket).click().perform() WebDriverWait(driver, 20).until(EC.visibility_of_element_located(( By.ID, "tableLiveMarket-equity-derivatives")))
  • 我建议再看一下您正在抓取的页面的html。似乎很可能没有找到该元素。我现在要睡觉了。祝你好运!
猜你喜欢
  • 2022-11-21
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2017-03-10
  • 2022-01-28
  • 1970-01-01
相关资源
最近更新 更多