每当while循环开始时,迭代下一行

时间:2019-01-24 20:57:29

标签: python python-3.x pandas selenium-webdriver while-loop

我有一个csv文件,其中包含从流API抓取的链接。我在while循环中有一个脚本(称为“ selenium.py”),其中selenium 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 :(得分:2)

将您在var name = JObject.Parse(json)["name"].Select(p => p["id"] == "1");中所做的任何事情捆绑到一个函数中,例如:

Selenium.py

然后在jupyter中使用以下命令导入文件:

def take_screenshot():
    # your code here

然后您可以使用以下命令调用该函数:

import Selenium

答案 1 :(得分:1)

首先,您需要将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'])

现在,您可以跟踪已读取的行数,并在读取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 / url中(这样您就不必提取两次)。