放大后无法获取任何元素的屏幕截图

rob*_*txt 7 python selenium web-scraping python-3.x selenium-webdriver

我正在尝试使用python与硒结合从网页中截取所需部分的屏幕截图。当我执行脚本时,确实会得到一个屏幕截图,但这并不是我打算让脚本抓取的。

我希望抓住Desired one下面显示的部分而不是Current output。要获得screenshot确切的显示方式Desired one,脚本必须单击该图像旁边的+按钮以使其更宽,以使图库中的点可见。

但是,当前方法仅获取该图像的部分部分的屏幕截图。而且,它也抓住了不需要的部分。

网页连结

我尝试过:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

link = 'https://www1.ticketmaster.com/celine-dion-courage-world-tour/event/0600567BFDB0AB48'

def start_script():
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    driver = webdriver.Chrome(options=options)
    return driver

def get_links(url):
    driver = start_script()
    driver.get(url)
    try:
        button = WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"#landingPricingMessage button.pricing-landing__modal-btn")))
    except Exception: button = ""
    if button: button.click()

    try:
        zoom = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,"button[class='zoomer__control--zoomin'] > svg[class='zoomin']")))
    except Exception: zoom = ""

    if zoom:
        for _ in range(3):
            zoom.click()
            time.sleep(2)
    try:
        element = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"svg[data-component='svg'][class='map__svg']")))
    except Exception: element = ""

    if element:
        element.screenshot('gallery.png')
        driver.quit()
        return 0

    else:
        driver.quit()
        return get_links(url)


if __name__ == '__main__':
    get_links(link)
Run Code Online (Sandbox Code Playgroud)

我什至尝试过这样,但输出仍然相同:

def get_links(url):
    driver = start_script()
    driver.get(url)
    try:
        elem = WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.XPATH,"//h1[contains(.,'Pardon the Interruption')]"))).text
    except Exception: elem = ""

    if elem:
        driver.quit()
        return get_links(url)
    else:
        element = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"svg[data-component='svg'][class='map__svg']")))
        location = element.location
        size = element.size
        png = driver.get_screenshot_as_png()
        im = Image.open(BytesIO(png))
        left = location['x']
        top = location['y']
        right = location['x'] + size['width']
        bottom = location['y'] + size['height']
        im = im.crop((left, top, right, bottom))
        im.save('screenshot.png')
        driver.quit()
        return 0
Run Code Online (Sandbox Code Playgroud)

电流输出

想要的一个

在所需的输出图像中,我标记了应该踢出的区域,因为它不是该图像的一部分。

即使放大后,如何只获取任何元素的屏幕截图?

注意:我使用了代理来使脚本工作,因为其中有一个自动程序保护机制在起作用。我只是在逻辑上获得期望的输出。

Guy*_*Guy 5

该地图包含在中<div id="map-container">。如果您对此元素进行屏幕截图,它将捕获缩放的地图

element = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID, 'map-container')))
element.screenshot('gallery.png')
Run Code Online (Sandbox Code Playgroud)