Повторяйте следующую строку каждый раз, когда начинается цикл - PullRequest
0 голосов
/ 24 января 2019

У меня есть CSV-файл со ссылками, скопированными из потокового API.У меня есть сценарий (называемый 'selenium.py') в цикле while, где Selennium WebDriver делает скриншот каждого URL, а затем сохраняет его в файле.Больше строк добавляются в CSV-файл каждую минуту.

Мой код:

df = pd.read_csv('screenshot.csv', header = 0, usecols= ['url','guid'])
while True: 
   i = 0  
   for i, row in df.iterrows():
       r = driver.get(row['url'])
       driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
       i += 1
       for n in range(2):
           file_name = str(row['guid'])
           fn_1 = "date_stamp{n:0>5}.png".format(n = n)
           date_stamp= str(datetime.datetime.now()).split('.')[0]
           fn_1 = date_stamp
           fn=driver.save_screenshot(file_name+ ' ' + date_stamp + '.png')
           sourcepath='/Users/user/'
           destinationpath = '/Users/user/Screen'
           sourcefiles = os.listdir(sourcepath)
           filename= file_name+ ' ' + date_stamp + '.png'

Что мне нужно:

Я запускаю скрипт в jupyter следующим образом:

while True: %run "Selenium.py" time.sleep(60.0 - ((time.time() - starttime) % 60.0))

Мне нужно каждый раз, когда запускается скрипт, итерация увеличивается на одну строку.

Любая помощь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Во-первых, вам нужно переместить чтение csv в цикл while:

df = pd.read_csv('screenshot.csv', header = 0, usecols= ['url','guid'])
while True: 

становится

while True: 
    df = pd.read_csv('screenshot.csv', header = 0, usecols= ['url','guid'])

Теперь вы можете отслеживать количество прочитанных строк и использовать skiprows при чтении csv. т.е.

i = 1
while True:
  df = pd.read_csv('screenshot.csv', header=0, usecols=['url','guid'], skiprows=lambda x: x in range(1, i))
  for i, row in df.iterrows():
    r = driver.get(row['url'])
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    i += 1

Тем не менее, вам может быть лучше не использовать здесь панд, а читать каждую строку построчно, либо сохранять их в виде dict, либо «видимых» guid / urls в наборе (так что вы не получить их дважды).

0 голосов
/ 25 января 2019

Объедините все, что вы делаете в Selenium.py, в такую ​​функцию, как:

def take_screenshot():
    # your code here

Затем в jupyter импортируйте ваш файл с помощью:

import Selenium

Затем вы можете вызвать функциюс:

while True:
    Selenium.take_screenshot()
    time.sleep(60.0 - ((time.time() - starttime) % 60.0))
...