Я использую Selenium, чтобы сделать снимок экрана из списка URL-адресов. test.txt включают reddit.com, stackoverflow.com и spotify.com. При итерации по этому списку я хочу, чтобы он сохранял в папке Скриншоты с именем файла url + '.png'. Но это не работает. У меня либо возникают ошибки, либо он просто продолжает работать, ничего не делая. Этот работает, но он просто перезаписывает старый
screenshot = driver.save_screenshot('Screenshots/foo.png')
Я хочу, чтобы это выглядело так, но это не работает:
screenshot = driver.save_screenshot('Screenshots/', line, '.png')
Я новичок в python, но он также не работает с использованием +. Проблема в том, что для этого нужно слишком много аргументов.
class Screenshot():
filehandle = open("test.txt", "r")
for line in filehandle:
DRIVER = 'chromedriver'
driver = webdriver.Chrome(DRIVER)
driver.get(line)
screenshot = driver.save_screenshot('Screenshots/foo.png')
driver.quit()
Да, хотя после строки есть разрыв строки
Этот код должен быть частью класса ScreenShot
? Или это было случайно опубликовано? Сначала я не видел этой части.
Это его часть, на самом деле это целый класс, каким бы огромным он ни был.
Ох, хорошо. Это все меняет. Разве это не под методом? То, что вы опубликовали, заставляет его выглядеть так, как будто оно «свободно плавающее» под определением имени класса (свободное плавание - это не техническое определение, а то, что я придумал, чтобы описать, как это выглядело).
Да, это свободно плавающий (: p). Я знаю java и C#, но это мой первый код на python, поэтому я еще практически ничего не понял. Какие изменения я должен внести, чтобы он работал в свободном обращении?
Сначала я бы этого не допустил. Во-вторых, вы ожидаете, что это сработает при создании экземпляра класса?
Позвольте нам продолжить обсуждение в чате.
Создание класса снимка экрана не требуется для такой простой задачи.
#!/usr/bin/env python
from __future__ import print_function
import os
from selenium import webdriver
def main():
driver = webdriver.Chrome()
# With automatically closes files when they go out of scope
with open('test.txt', 'r') as f:
for url in f.readlines():
driver.get(url)
# os.path.join should make it platform agnostic
# Also remove any '/' from the url and replace to avoid any file system save issues
sn_name = os.path.join('Screenshots', url.strip().replace('/', '-') + '.png')
print('Attempting to save:', sn_name)
# '.save_screenshot' returns false if it fails so throw exception
if not driver.save_screenshot(sn_name):
raise Exception('Could not save screen shot: ' + sn_name)
# Close browser
driver.quit()
if __name__ == '__main__':
main()
Однако он не сохраняет скриншоты. Он компилируется и открывает следующую строку, но ничего не сохраняется
Вероятно, из-за символа новой строки в конце строки. Смотрите мой обновленный ответ.
К сожалению, это тоже не работает. Полоса действительно удаляет новую строку (print (line.strip ())
Если вы используете
print(line)
в своем цикле, правильно ли он печатает URL-адреса?