我有一个名为(data.csv)的csv文件。此csv文件包含2列,第一列称为(标题),另一列称为(链接)。
此代码用于打开链接列中的每个URL并下载链接到它的文件。然后使用title列中的字符串重命名它,该列位于同一行中。
出于任何原因,如果文件没有下载,代码应该传递整行。 然后在下一行再次开始,直到列表完成。
这是数据: https://drive.google.com/open?id=0B5bJvxM9TZkhVGI5dkdLVzAyNTA
以下是代码:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import pandas as pd
import os
df = pd.read_csv('data.csv')
os.chdir("C:\\Users\\Sayed\\Downloads")
titles = df['title']
links = df['link']
for event in links:
driver = webdriver.Chrome()
driver.get(event)
# download
driver.find_element_by_xpath('//*[@id="fxec_historytable"]/a').click()
WebDriverWait(driver, 100).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="fxec_historytable"]/a')))
for file, name in zip(os.listdir(), titles):
fileName = os.path.splitext(file)
os.rename(file, name)
下载部分没问题,但根本没有重命名。
答案 0 :(得分:0)
我修改了您的脚本,因此您可以指定下载文件夹,而不必使用您的用户下载文件夹。
此外,您可以在下载文件时重命名文件,然后确保重命名文件。
另一个改进是在for循环的每次迭代中只创建一个Webdriver实例,与新实例相反。
最后,在重命名文件时你没有添加扩展名,我认为这是重命名错误的原因。
以下是修改后的版本,请确保输出文件夹在运行之前为空:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import pandas as pd
import os
default_dir = r"C:\temp\Test"
df = pd.read_csv(r'c:\temp\data.csv')
os.chdir(default_dir)
titles = df['title']
links = df['link']
options = webdriver.ChromeOptions()
options.add_experimental_option("prefs", {
"download.default_directory": default_dir,
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing.enabled": True
})
driver = webdriver.Chrome("c:/temp/chromedriver.exe", chrome_options=options)
for idx, event in enumerate(links):
driver.get(event)
# download
driver.find_element_by_xpath('//*[@id="fxec_historytable"]/a').click()
WebDriverWait(driver, 100).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="fxec_historytable"]/a')))
while not os.path.exists(os.path.join(default_dir, "history.csv")):
pass
# assumming the file is called "history.csv"
file = os.path.join(default_dir, "history.csv")
os.rename(file, titles[idx] + ".csv")
答案 1 :(得分:0)
忽略以前的编辑。 错误的代码,错误的位置,错误的问题。