首页 > 解决方案 > 从股票筛选器中提取信息

问题描述

我是使用硒来抓取信息的新手。我想在买价和卖价部分刮价格。当我检查网页源代码时,我发现它是由 JavaScript 运行的。这是我尝试过的:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# specify the url
urlpage = 'https://banggia.vps.com.vn/chung-khoan/derivative-VN30'
driver = webdriver.Chrome()
driver.get(urlpage)
# print(driver.page_source)
# root = driver.execute_script("return document.getElementsByTagName('html')[0].innerHTML")
# print(root)
WebDriverWait(driver, 
10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"ptifrmtgtframe")))
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, 
"//span[@id='root']")))
# //*[@id="root"]/div/div[5]/div[1]/table[2]/tbody/tr[2]/td[9]/span[1]
print(driver.page_source)
driver.quit()

但是,我收到了一个例外:

Traceback (most recent call last):
File "C:/Users/quank/AppData/Roaming/JetBrains/PyCharmCE2021.2/scratches/scratch.py", line 17, 
in <module>
WebDriverWait(driver, 
10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"ptifrmtgtframe")))
File "C:\Users\quank\PycharmProjects\pythonProject1\venv\lib\site- 
packages\selenium\webdriver\support\wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

这是该网站的链接:[https://banggia.vps.com.vn/chung-khoan/derivative-VN30][1]。再说一次,我在使用 selenium 并尝试学习新事物方面是新手,因为我还没有在学校学习网络抓取。因此,请在您的答案中添加一些解释,以便我将来可以学习如何抓取这样的网站。我感谢任何帮助,并提前感谢。

更新:我尝试将信息收集到“元素”列表中并使用 for 循环将其打印出来。但是,我只得到一个类的名称。

from selenium import webdriver


options = webdriver.ChromeOptions()
options.headless = True
path = 'C:/Users/quank/PycharmProjects/pythonProject2/chromedriver.exe'
driver = webdriver.Chrome(executable_path=path, options=options)
url = 'https://banggia.vps.com.vn/chung-khoan/derivative-VN30'
driver.get(url=url)
element = driver.find_elements_by_css_selector('#root > div > 
div.content.undefined > div.derivative > table.price-table > tbody')
for i in element:
    print(i.get_attribute('outerHTML'))   

结果如下:

<tbody class="price-table-content"></tbody>

任何有助于获得“价格表内容”的内容表示赞赏:) [1]:https ://banggia.vps.com.vn/chung-khoan/derivative-VN30

标签: pythonseleniumweb-scraping

解决方案


在这一行

WebDriverWait(driver, 
10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"ptifrmtgtframe")))

您正在等待由 ID= 定位的 iframeptifrmtgtframe
但那里没有这样的 iframe。
此外,该页面上没有任何 iframe。
这就是为什么 Selenium 在您在此处定义的 10 秒超时内无法找到此类元素并引发TimeoutException异常的原因。


推荐阅读