Python 2.7 如何使用Python和Selenium从Digikey网站读取股票数据?
以下是Digikey网站示例: 我试图从上述网站上读取库存可用性数据,在本例中,发布时的库存可用性数据为42107。我在下面包含了一段代码。我在那里使用了一些额外的调试行,我完全是一个PythonNoob,所以请放轻松:) “输入MPN”部分工作正常,可以将我带到上面提供的链接。我在早期添加了“等待加载”部分作为预防措施,以确保加载了内容,并且可以直观地看到我试图捕获的数据 当我尝试读取库存可用性时,我得到一个错误,说元素不存在。我直接从显示库存量的行中获取Xpath,因此我相当肯定这是正确的。另一件有趣的事情是,我能够搜索并找到“产品属性”或顶部的摘要部分中的所有元素。我只是找不到“价格和采购”部分包含的任何元素。从一些阅读中,我认为这可能是一个iFrame问题,我需要切换到正确的帧,但我也尝试循环所有找到的iFrame并进行读取,但这些都不起作用 很高兴尝试一些想法Python 2.7 如何使用Python和Selenium从Digikey网站读取股票数据?,python-2.7,selenium,iframe,Python 2.7,Selenium,Iframe,以下是Digikey网站示例: 我试图从上述网站上读取库存可用性数据,在本例中,发布时的库存可用性数据为42107。我在下面包含了一段代码。我在那里使用了一些额外的调试行,我完全是一个PythonNoob,所以请放轻松:) “输入MPN”部分工作正常,可以将我带到上面提供的链接。我在早期添加了“等待加载”部分作为预防措施,以确保加载了内容,并且可以直观地看到我试图捕获的数据 当我尝试读取库存可用性时,我得到一个错误,说元素不存在。我直接从显示库存量的行中获取Xpath,因此我相当肯定这是正确的。
# Enter MPN
search_box_xpath = '//html/body/header/div[2]/div[1]/div/div[2]/div[2]/input'
wait.until(EC.visibility_of_element_located((By.XPATH, search_box_xpath)))
search_box = driver.find_element_by_xpath(search_box_xpath)
driver.execute_script("arguments[0].click();", search_box)
search_box.send_keys(MPN) # Type in MPN
search_button_xpath = '//html/body/header/div[2]/div[1]/div/div[2]/div[3]/button'
wait.until(EC.visibility_of_element_located((By.XPATH, search_button_xpath)))
search_button = driver.find_element_by_xpath(search_button_xpath)
driver.execute_script("arguments[0].click();", search_button)
# Wait for load
time.sleep(5)
# Try and read Stock availability
stockText_xpath = '//html/body/div[2]/main/div/div[1]/div[2]/div/div/div[2]/div/div[1]'
wait.until(EC.visibility_of_element_located((By.XPATH, stockText_xpath)))
print('ELEMENT FOUND!')
stockText = driver.find_element_by_xpath(stockText_xpath)
raw_input('FOUND STOCK TEXT!')
正如其他人提到的,您应该使用更健壮的XPath。下面是一个如何缩短XPath的示例。以下内容将打开URL,搜索“MPN”并单击“库存”复选框
driver.get('https://www.digikey.com/en/products/detail/panasonic-electronic-components/ERJ-8ENF2211V/88928?s=N4IgTCBcDaIKICUBSBaAHHAcgMTGAjPgGogC6AvkA')
search_box_xpath = "//input[@name='keywords']"
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH, search_box_xpath)))
search_box = driver.find_element_by_xpath(search_box_xpath)
search_box.send_keys("MPN") # Type in MPN
search_button_xpath = "//button[@class='search-button']"
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH, search_button_xpath))).click()
stock_availability = "(//span[@class='MuiIconButton-label'])[1]"
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH, stock_availability))).click()
编辑
我刚刚重读了你的问题,有点困惑。如果您只是在查找您提供的直接URL上列出的股票总数(无需搜索任何内容),您可以使用以下选项:
total_stock_xpath = "//div[@class='jss195']/div/div"
total_stock = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH, total_stock_xpath))).text
print(total_stock)
印刷品:
37,107 In Stock
Python 2.7格式,因为您需要XPATH/span[contains(text(),“In Stock”)]可能会这样做。请注意,如果您使用那里的帐户,这违反了他们的服务条款:“您不能使用任何机器人、刮板、蜘蛛或其他自动方式访问或收集网站内容,或镜像、联合品牌,或者在任何其他网站或网页上框定主页或该网站的任何其他页面。“像这样的长xpath非常不稳定。您是否在
stockText=driver行中遇到错误。通过xpath查找元素(stockText\u xpath)
?错误实际上来自该行正上方的wait命令,该命令正在检查可见性。即使我搜索可以在“价格和采购”部分找到的更简单的东西(driver.find\u element\u by_class\u name('jss334'),它仍然找不到它