当使用 Selenium 和 Python 传递值时,动态下拉列表不会填充 https://www.nseindia.com/ 上的自动建议
Dynamic dropdown doesn't populate with auto suggestions on https://www.nseindia.com/ when values are passed using Selenium and Python
driver = webdriver.Chrome('C:/Workspace/Development/chromedriver.exe')
driver.get('https://www.nseindia.com/companies-listing/corporate-filings-actions')
inputbox = driver.find_element_by_xpath('/html/body/div[7]/div[1]/div/section/div/div/div/div/div/div[1]/div[1]/div[1]/div/span/input[2]')
inputbox.send_keys("Reliance")
我正在尝试从这个 website 中抓取 table,它会在您在其上方的文本字段中键入公司名称后出现。附加的代码块可以很好地与普通 google 搜索和 wolfram 网站的类似下拉列表一起使用,但是当我 运行 我在所需网站上的脚本时,基本上只是在文本字段中输入所需的文本- 下拉列表显示 'No Records Found',而手动完成时效果很好。
我执行了你的测试,添加了一些调整,运行 测试如下:
代码块:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
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:\WebDrivers\chromedriver.exe')
driver.get('https://www.nseindia.com/companies-listing/corporate-filings-actions')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='Corporate_Actions_equity']//input[@placeholder='Company Name or Symbol']"))).send_keys("Reliance")
观察:和你的观察类似,我也遇到了同样的障碍,没有结果如下:
深入探讨
似乎 click()
在文本为 Get Data 的元素上确实发生了。但是在检查 网页 的 DOM Tree 时,您会发现一些 <script>
标签引用 JavaScripts 具有关键字阿卡姆。例如:
<script type="text/javascript" src="https://www.nseindia.com/akam/11/3b383b75" defer=""></script>
<noscript><img src="https://www.nseindia.com/akam/11/pixel_3b383b75?a=dD02ZDMxODU2ODk2YTYwODA4M2JlOTlmOGNkZTY3Njg4ZWRmZjE4YmMwJmpzPW9mZg==" style="visibility: hidden; position: absolute; left: -999px; top: -999px;" /></noscript>
这清楚地表明该网站受 Bot Manager an advanced bot detection service provided by Akamai 保护并且响应被 阻止。
机器人管理器
根据文章Bot Manager - Foundations:
结论
因此可以得出结论,数据请求被检测为由 driven 实例执行并且响应被阻止。
参考资料
一些文档:
tl;博士
几个相关的讨论:
driver = webdriver.Chrome('C:/Workspace/Development/chromedriver.exe')
driver.get('https://www.nseindia.com/companies-listing/corporate-filings-actions')
inputbox = driver.find_element_by_xpath('/html/body/div[7]/div[1]/div/section/div/div/div/div/div/div[1]/div[1]/div[1]/div/span/input[2]')
inputbox.send_keys("Reliance")
我正在尝试从这个 website 中抓取 table,它会在您在其上方的文本字段中键入公司名称后出现。附加的代码块可以很好地与普通 google 搜索和 wolfram 网站的类似下拉列表一起使用,但是当我 运行 我在所需网站上的脚本时,基本上只是在文本字段中输入所需的文本- 下拉列表显示 'No Records Found',而手动完成时效果很好。
我执行了你的测试,添加了一些调整,运行 测试如下:
代码块:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By 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:\WebDrivers\chromedriver.exe') driver.get('https://www.nseindia.com/companies-listing/corporate-filings-actions') WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='Corporate_Actions_equity']//input[@placeholder='Company Name or Symbol']"))).send_keys("Reliance")
观察:和你的观察类似,我也遇到了同样的障碍,没有结果如下:
深入探讨
似乎 click()
在文本为 Get Data 的元素上确实发生了。但是在检查 网页 的 DOM Tree 时,您会发现一些 <script>
标签引用 JavaScripts 具有关键字阿卡姆。例如:
<script type="text/javascript" src="https://www.nseindia.com/akam/11/3b383b75" defer=""></script>
<noscript><img src="https://www.nseindia.com/akam/11/pixel_3b383b75?a=dD02ZDMxODU2ODk2YTYwODA4M2JlOTlmOGNkZTY3Njg4ZWRmZjE4YmMwJmpzPW9mZg==" style="visibility: hidden; position: absolute; left: -999px; top: -999px;" /></noscript>
这清楚地表明该网站受 Bot Manager an advanced bot detection service provided by Akamai 保护并且响应被 阻止。
机器人管理器
根据文章Bot Manager - Foundations:
结论
因此可以得出结论,数据请求被检测为由
参考资料
一些文档:
tl;博士
几个相关的讨论: