【发布时间】:2018-02-01 04:16:06
【问题描述】:
我正在尝试使用 Selenium 截取 this page 的屏幕截图。但由于 Chrome 和 Firefox 不允许全屏截图,所以我使用的是 PhantomJS。
有 2 组持续时间:12 Month 和 Month-to-Month。因此,我尝试单击每个选项卡并截取屏幕截图。
获取页面内容的代码为:
browser = webdriver.PhantomJS()
browser.set_window_size(1366, 728)
browser.get("http://www.optus.com.au/shop/broadband/mobile-broadband/data-sim-card")
delay = 30 # seconds
try:
wait = WebDriverWait(browser, delay)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.price")))
print("\nPage is ready!")
except TimeoutException:
print("Loading took too much time!")
html = browser.page_source
soup = BeautifulSoup(html, "html.parser")
获取持续时间的 css 类名:
durations = soup.body.find("ul", attrs={'class': 'filter-options grouped'})
duration_filtrs = {}
for content in durations.contents:
duration = content.text # Storage of the model 64GB, 256GB, 512GB
css_clss = list(filter(lambda x: x not in ['', 'active'], content.attrs['class']))
filtr_nm = '.' + '.'.join(css_clss)
duration_filtrs[duration] = filtr_nm
print(duration_filtrs)
# {'12 Months': '.filter-option.contract_length_12', 'Month to Month':'.filter-option.contract_length_1'}
要为每个持续时间选项卡截取屏幕截图,
for duration, css_cls in duration_filtrs.items():
browser.find_element_by_css_selector(css_cls).click()
browser.save_screenshot(duration+'.png')
使用上面的代码,即使文件大小略有不同,我也会得到类似的屏幕截图。
谁能告诉我我做错了什么?
【问题讨论】:
-
你的意思是说标签似乎没有被切换?
-
当我使用 Chrome(而不是 PhantomJS)和屏幕截图(即使它们不是整页)对我来说看起来正确
标签: python html selenium web-scraping phantomjs