Как сохранить несколько скриншотов в l oop с селеном в Python - PullRequest
0 голосов
/ 05 мая 2020

Код находит строку поиска на странице, вводит ссылки и сохраняет скриншоты в al oop для каждого результата для каждой ссылки. Как правильно сделать так, чтобы скриншоты сохранялись под разными именами в папке? На данный момент они вообще не сохраняются.

for i in listOfLinks:
    searchBar = browser.find_element_by_xpath('//*[@id="syte-react"]/div/div/div[1]/div[1]/div[2]/form/input')
    searchBar.click()
    insertLink = searchBar.send_keys(i)
    clickSubmit = browser.find_element_by_xpath(
        '//*[@id="syte-react"]/div/div/div[1]/div[1]/div[2]/form/button').click()
    results = browser.find_element_by_xpath('//*[@id="imajs-overlay--"]')
    time.sleep(5)
    filename = i.split('//')[-1] + '.png'
    browser.get_screenshot_as_file('C:\\Users\\Valeriia\\PycharmProjects\\selen\\tests_results\\apr_network'+ filename)
    print('ok')
    browser.refresh()
    time.sleep(5)
    continue
print("the end")
browser.close()

1 Ответ

0 голосов
/ 05 мая 2020

Ниже я упоминаю 3 подхода, первый из которых ваш, у меня работает нормально.

Пожалуйста, внесите изменения в соответствии с вашими требованиями.

from selenium import webdriver
import datetime
opt=webdriver.ChromeOptions()
opt.add_argument("--start-maximized")
driver= webdriver.Chrome(executable_path="C:\\chrome driver\\chromedriver.exe",options=opt)
driver.get("http://xfas.in/")

# put below lines in loop
timestamp = datetime.datetime.now().strftime('%d_%m_%Y_%H_%M_%S')
driver.get_screenshot_as_file(timestamp+'.png')
print('ok')


# Approch 2
# if your screen is visible you can use pyautogui
import pyautogui
import datetime

timestamp = datetime.datetime.now().strftime('%d_%m_%Y_%H_%M_%S')
pyautogui.screenshot(r"c:anypath\timestamp .png")


# Approach 3 long but better
# Even if screen is not visible save the visible page as pdf, best approch as save entire page.


from selenium import webdriver
import shutil
import time
import glob
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import json
import datetime
import os


appState = {
    "recentDestinations": [
        {
            "id": "Save as PDF",
            "origin": "local",
            "account": ""
        }
    ],
    "selectedDestinationId": "Save as PDF",
    "version": 2
}

profile = {'printing.print_preview_sticky_settings.appState': json.dumps(appState)}

opt=webdriver.ChromeOptions()
opt.add_experimental_option('prefs', profile)
opt.add_argument('--kiosk-printing')
opt.add_argument("--start-maximized")
driver= webdriver.Chrome(executable_path="C:\\chrome driver\\chromedriver.exe",options=opt)
driver.get("http://xfas.in/")
WebDriverWait(driver,30).until(EC.element_to_be_clickable,((By.XPATH,'//*[@id="txtTracking"]')))

# place these line post the code when you want to save the page.
time.sleep(1)
driver.execute_script('window.print();')
time.sleep(3)

# file will be saved in chrome download folder , in the end partial name of the file and extension
list_of_files = glob.glob(r'C:\Users\path\Downloads\Xfas*.pdf')
latest_file = max(list_of_files, key=os.path.getctime)
# copy the path to desired folder
timestamp = datetime.datetime.now().strftime('%d_%m_%Y_%H_%M_%S')
shutil.copy(latest_file,'C:\\YourFolder\\Folder2\\'+timestamp+'.pdf')
# one file is copied delete the file from download the folder , choice
os.remove(latest_file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...