Реклама находится в iFrame, поэтому вам нужно сначала переключить этот кадр.
Но я обнаружил, что после нескольких загрузок страницы реклама перестала появляться на веб-странице. Я обнаружил, что реклама загружается почти каждый раз, используя driver = webdriver.Opera()
, но не в Chrome из Firefox, даже используя частный просмотр и очистку всех данных просмотра.
Если они появились, этот код работал.
Чтобы найти элемент по частичному имени класса, я сначала использовал find_element_by_css_selector("amp-img[class^='img_ad']")
. Иногда элемент с классом img_ad
отсутствует, поэтому вы можете использовать driver.find_element_by_id("aw0")
, который чаще находит данные. Иногда веб-страница HTML даже не имеет этого идентификатора, поэтому мой код печатает HTML.
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Firefox()
driver.get("https://www.smh.com.au")
driver.implicitly_wait(10)
iFrame = driver.find_elements_by_tag_name("iframe")[1]
driver.switch_to.frame(iFrame)
try:
# element = driver.find_element_by_css_selector("amp-img[class^='img_ad']")
# print(element.get_attribute('outerHTML'))
element = driver.find_element_by_id("aw0")
print(element.get_attribute('innerHTML'))
except NoSuchElementException:
print("Advert not found")
print(driver.page_source)
driver.quit()
Выходы:
<amp-img alt="" class="img_ad i-amphtml-layout-fixed i-amphtml-layout-size-defined i-amphtml-element i-amphtml-layout" height="250" i-amphtml-layout="fixed" i-amphtml-ssr="" src="https://tpc.googlesyndication.com/simgad/16664324514375864185" style="width:970px;height:250px;" width="970"><img alt="" class="i-amphtml-fill-content i-amphtml-replaced-content" decoding="async" src="https://tpc.googlesyndication.com/simgad/16664324514375864185"></amp-img>
или:
<img src="https://tpc.googlesyndication.com/simgad/10498242030813793376" border="0" width="970" height="250" alt="" class="img_ad">
или:
<html><head></head><body></body></html>