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)
在所需的输出图像中,我标记了应该踢出的区域,因为它不是该图像的一部分。
即使放大后,如何只获取任何元素的屏幕截图?
注意:我使用了代理来使脚本工作,因为其中有一个自动程序保护机制在起作用。我只是在逻辑上获得期望的输出。
该地图包含在中<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)
归档时间: |
|
查看次数: |
290 次 |
最近记录: |