我在python和selenium中创建了一个脚本,可以从一个网站上的表中解析三个字段franking credit、gross divident和further information。最后两个字段只有在浏览器单击循环黄色按钮时才会显示,该按钮中有加号()。
但是,当单击按钮时,它们会变成红色,这表示信息已被显示。
我的脚本可以点击所有的按钮,但是它不能从那个表中抓取这三个字段。
我附上了一张图片,向你展示它的真实面貌。
我知道如果我向这个https://www.sharedividends.com.au/wp-content/custom/ajaxfile.php?code=MLT发送带有相关有效负载的post http请求,我可以得到json中的所有表格字段,但这不是我想要解决的问题。
我试过:
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
url = "https://www.sharedividends.com.au/mlt-dividend-history/"
driver = webdriver.Chrome()
driver.get(url)
table = driver.find_element_by_css_selector("#divTable")
driver.execute_script("arguments[0].scrollIntoView();",table)
for items in driver.find_elements_by_css_selector("td.sorting_1"):
driver.execute_script("arguments[0].scrollIntoView();",items)
items.click()
for elems in driver.find_elements_by_css_selector("#divTable tbody tr"):
franking_credit = elems.find_elements_by_css_selector("td")[5].text
gross_divident = elems.find_elements_by_css_selector("td")[6].text
further_info = elems.find_elements_by_css_selector("td")[7].text
print(franking_credit,gross_divident,further_info)
driver.quit()当我运行上面的脚本时,它会抛出这个错误,IndexError: list index out of range指向franking_credit =这一行。
这张桌子是这样的。我已经在我感兴趣的图片中标记了表中的三个字段。
https://filebin.net/x5adwz7y6hfir2sc
如何解析表中的三个字段?
发布于 2019-08-09 10:16:49
您将得到以下错误,因为当运行自动化脚本时,它会显示带有其他属性的20行,而不是10 rows.Try,下面的代码如下所示。
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
url = "https://www.sharedividends.com.au/mlt-dividend-history/"
driver = webdriver.Chrome()
driver.get(url)
table = driver.find_element_by_css_selector("#divTable")
driver.execute_script("arguments[0].scrollIntoView();",table)
for items in driver.find_elements_by_css_selector("td.sorting_1"):
driver.execute_script("arguments[0].scrollIntoView();",items)
items.click()
for elems in driver.find_elements_by_css_selector("#divTable tbody tr[role='row']"):
franking_credit = elems.find_elements_by_css_selector("td")[5].text
gross_divident = elems.find_elements_by_css_selector("td")[6].get_attribute('textContent')
further_info = elems.find_elements_by_css_selector("td")[7].get_attribute('textContent')
print(franking_credit, gross_divident,further_info)控制台上的输出:
$ 0.0446 $ 0.1486 10.4C FRANKED @ 30%; DRP NIL DISCOUNT
$ 0.0107 $ 0.0357 2.5C FRANKED@30%; SP ECIAL; DRP SUSP
$ 0.0386 $ 0.1286 9C FRANKED @ 30%; DR P NIL DISCOUNT
$ 0.0437 $ 0.1457 10.2C FRANKED @ 30%; DRP NIL DISCOUNT
$ 0.0377 $ 0.1257 8.8C FRANKED @ 30%; DRP NIL DISCOUNT
$ 0.0429 $ 0.1429 10C FRANKED @ 30%; D RP NIL DISCOUNT
$ 0.0373 $ 0.1243 8.7C FRANKED @ 30%; DRP NIL DISCOUNT
$ 0.0424 $ 0.1414 9.9C FRANKED @ 30%; DRP NIL DISCOUNT
$ 0.0373 $ 0.1243 8.7C FRANKED @ 30%; DRP
$ 0.0441 $ 0.1471 10.3C FR@30%;0.4C SP ECIAL;DRP;NIL DIS发布于 2019-08-09 09:22:39
这应该就行了!
from selenium import webdriver
driver = webdriver.Chrome('chromedriver/chromedriver.exe')
driver.get("https://www.sharedividends.com.au/mlt-dividend-history/")
for button in driver.find_elements_by_class_name("sorting_1"):
button.click()
# Returns first part of the info
for item in driver.find_elements_by_xpath("//tr[@role='row']/td"):
print(item.text)
# Returns second part of info
for a in driver.find_elements_by_xpath("//ul[@class='dtr-details']/li"):
print(a.text)输出;这
发布于 2019-08-09 11:09:17
要从三个字段提取数据
https://stackoverflow.com/questions/57426734
复制相似问题