如何在浏览器打开时弹出“广告”?

时间:2017-10-15 12:17:06

标签: python selenium selenium-webdriver web-scraping

我在python中编写了一个与selenium结合使用的脚本来解析网页中的一些公司名称。我定义的选择器完美无瑕。但是,只要网页打开,就会弹出一个令人讨厌的ad弹出隐藏数据的内容,为此我无法到达那里。我怎样才能解决它并解析我想要的数据。我尝试过在该网页中切换多个iframes,但没有一个有效。我在脚本中使用的现有版本会抛出显示Message: no such element: Unable to locate element的错误。

这是我到目前为止所尝试的:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.inc.com/inc5000/list/2017")
driver.switch_to_frame(driver.find_element_by_id("jw_player_iconic"))
for item in driver.find_elements_by_css_selector("#data-container .row"):
    company = item.find_elements_by_css_selector(".company a")[0].text
    print(company)
driver.quit()

弹出广告就像下面的那样(明亮的广告):

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以点击“跳过”按钮尝试等待广告关闭:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

driver = webdriver.Chrome()
driver.get("https://www.inc.com/inc5000/list/2017")
driver.maximize_window()

try:
    ad_iframe_close = wait(driver, 3).until(EC.element_to_be_clickable((By.XPATH, "//span[.='SKIP']")))
    ad_iframe_close.click()
except TimeoutException:
    pass

for item in driver.find_elements_by_css_selector("#data-container .row"):
    company = item.find_elements_by_css_selector(".company a")[0].text
    print(company)

这应该可以让你等到关闭广告框架或什么都不做,以防万一没有出现3秒