Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何使用Python和Selenium从Digikey网站读取股票数据?_Python 2.7_Selenium_Iframe - Fatal编程技术网

Python 2.7 如何使用Python和Selenium从Digikey网站读取股票数据?

Python 2.7 如何使用Python和Selenium从Digikey网站读取股票数据?,python-2.7,selenium,iframe,Python 2.7,Selenium,Iframe,以下是Digikey网站示例: 我试图从上述网站上读取库存可用性数据,在本例中,发布时的库存可用性数据为42107。我在下面包含了一段代码。我在那里使用了一些额外的调试行,我完全是一个PythonNoob,所以请放轻松:) “输入MPN”部分工作正常,可以将我带到上面提供的链接。我在早期添加了“等待加载”部分作为预防措施,以确保加载了内容,并且可以直观地看到我试图捕获的数据 当我尝试读取库存可用性时,我得到一个错误,说元素不存在。我直接从显示库存量的行中获取Xpath,因此我相当肯定这是正确的。

以下是Digikey网站示例:

我试图从上述网站上读取库存可用性数据,在本例中,发布时的库存可用性数据为42107。我在下面包含了一段代码。我在那里使用了一些额外的调试行,我完全是一个PythonNoob,所以请放轻松:)

“输入MPN”部分工作正常,可以将我带到上面提供的链接。我在早期添加了“等待加载”部分作为预防措施,以确保加载了内容,并且可以直观地看到我试图捕获的数据

当我尝试读取库存可用性时,我得到一个错误,说元素不存在。我直接从显示库存量的行中获取Xpath,因此我相当肯定这是正确的。另一件有趣的事情是,我能够搜索并找到“产品属性”或顶部的摘要部分中的所有元素。我只是找不到“价格和采购”部分包含的任何元素。从一些阅读中,我认为这可能是一个iFrame问题,我需要切换到正确的帧,但我也尝试循环所有找到的iFrame并进行读取,但这些都不起作用

很高兴尝试一些想法

# 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'),它仍然找不到它