使用 python 和 selenium 访问隐藏在 iframe 中的 table
Access the table hidden inside an iframe using python and selenium
我正在尝试从这个 web page 访问公告 table。 table 位于 iframe 中,页面加载时其内容在源代码中不可见。如果我检查元素“两次”,table 只会出现在源代码中。一旦 table 可见,我就可以通过 chrome 控制台执行下面的 javascript 代码来访问 table.
document.getElementsByTagName('html')[0].getElementsByTagName('body')[0].getElementsByTagName('section')[4].getElementsByTagName('article')[0].getElementsByTagName('div')[2].getElementsByTagName('announcement_data')[0].getElementsByTagName('table')[0].getElementsByTagName('tbody')[0].getElementsByTagName('tr')
但是,我正在努力寻找一种方法,使用 python 和 selenium 以编程方式使 iframe 中的元素可见。我尝试切换到 iframe,但没有用。
seq = driver.find_elements_by_tag_name('iframe')
print("No of frames present in the web page are: ", len(seq))
iframe = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to.frame(iframe)
table = driver.execute_script("return document.getElementsByTagName('html')[0].getElementsByTagName('body')[0].getElementsByTagName('section')[4].getElementsByTagName('article')[0].getElementsByTagName('div')[2].getElementsByTagName('announcement_data')[0].getElementsByTagName('table')[0].getElementsByTagName('tbody')[0].getElementsByTagName('tr');")
如果我尝试 运行 我的 jupyter notebook 中的上述代码,我会收到以下错误 -
No of frames present in the web page are: 4
Error getting the length of the table: list index out of range
任何访问 table 的长度和内容的指针都将不胜感激。
谢谢。
您应该能够以编程方式抓取 iframe url,然后将其作为新页面加载到 selenium 中。
https://www.asx.com.au/asx/v2/statistics/todayAnns.do
是 iframe 的 url。
要以编程方式执行此操作,请尝试如下操作:
url = driver.find_element_by_class_name('external-form__iframe default').get_attribute("src")
driver.get(url)
我正在尝试从这个 web page 访问公告 table。 table 位于 iframe 中,页面加载时其内容在源代码中不可见。如果我检查元素“两次”,table 只会出现在源代码中。一旦 table 可见,我就可以通过 chrome 控制台执行下面的 javascript 代码来访问 table.
document.getElementsByTagName('html')[0].getElementsByTagName('body')[0].getElementsByTagName('section')[4].getElementsByTagName('article')[0].getElementsByTagName('div')[2].getElementsByTagName('announcement_data')[0].getElementsByTagName('table')[0].getElementsByTagName('tbody')[0].getElementsByTagName('tr')
但是,我正在努力寻找一种方法,使用 python 和 selenium 以编程方式使 iframe 中的元素可见。我尝试切换到 iframe,但没有用。
seq = driver.find_elements_by_tag_name('iframe')
print("No of frames present in the web page are: ", len(seq))
iframe = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to.frame(iframe)
table = driver.execute_script("return document.getElementsByTagName('html')[0].getElementsByTagName('body')[0].getElementsByTagName('section')[4].getElementsByTagName('article')[0].getElementsByTagName('div')[2].getElementsByTagName('announcement_data')[0].getElementsByTagName('table')[0].getElementsByTagName('tbody')[0].getElementsByTagName('tr');")
如果我尝试 运行 我的 jupyter notebook 中的上述代码,我会收到以下错误 -
No of frames present in the web page are: 4
Error getting the length of the table: list index out of range
任何访问 table 的长度和内容的指针都将不胜感激。
谢谢。
您应该能够以编程方式抓取 iframe url,然后将其作为新页面加载到 selenium 中。
https://www.asx.com.au/asx/v2/statistics/todayAnns.do
是 iframe 的 url。
要以编程方式执行此操作,请尝试如下操作:
url = driver.find_element_by_class_name('external-form__iframe default').get_attribute("src")
driver.get(url)