Andie31
Andie31

Reputation: 325

Access the link inside iframe with Python/Selenium and get url

My main html page has an iframe it and I to need to get the text Code: LWBAD that lives there.

Check picture for a better understanding:

enter image description here

Bellow is my main html page source that has an iframe in it:

<td class="centerdata flag"><iframe style="width: 200px; height: 206px;" scrolling="no" src="https://www.example.com/test/somewhere" ></iframe></td>

The redirect link (iframe page) has this html source

<body>
<a href="http://www.test2.com" target="_blank">
<img src="https://img2.test2.com/LWBAD-1.jpg"></a>
<br/>Code: LWBAD

So far I can get the complete page source from my main html page.

from bs4 import BeautifulSoup
from selenium import webdriver
import time
import html5lib

driver_path = '/usr/local/bin/chromedriver 2'
driver = webdriver.Chrome(driver_path)
driver.implicitly_wait(10)

driver.get('http://example.com')
try:
    time.sleep(4)
    iframe = driver.find_elements_by_tag_name('iframe')
    driver.switch_to_default_content()

    output = driver.page_source

    print (output)

finally:
    driver.quit();

*urls are not accesible from outside of my network that's why I used example.com

Upvotes: 2

Views: 3687

Answers (2)

Nihal
Nihal

Reputation: 5334

try this:

iframe = driver.find_elements_by_tag_name('iframe')
for i in range(0, len(iframe)):
    f = driver.find_elements_by_tag_name('iframe')[i]
    driver.switch_to.frame(i)
    #  your work to extract link
    text = driver.find_element_by_tag_name('body').text
    print(text)
    driver.switch_to_default_content()

Upvotes: 0

Nihal
Nihal

Reputation: 5334

you should use

iframe = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to.frame(iframe)
 #  your work to extract link
driver.switch_to_default_content()

for multiple url

find_elements_by_tag_name will return an array. so use for loop

iframe = driver.find_elements_by_tag_name('iframe')
for i in iframe:
    driver.switch_to.frame(i)
    #  your work to extract link
driver.switch_to_default_content()

to get only text

use

text = driver.find_element_by_tag_name('body').text

after driver.switch_to.frame(i)

Upvotes: 1

Related Questions