【问题标题】:How to use selenium to open multiple urls from a column in an xlsx file如何使用 selenium 从 xlsx 文件中的列中打开多个 url
【发布时间】:2020-01-24 23:14:24
【问题描述】:

我是一个绝对的菜鸟,我有以下情况:我有一个 Excel 文件,其中有一列填充了 +4000 个 URL,每个 URL 位于不同的单元格中。该 url 链接到一个类似 facebook 的页面,在该页面中要求用户设置密码。我需要使用 Python 从列中检索每个 url,用 Chrome 打开它,为所有用户输入相同的指定密码,然后验证它是否登陆主页。

一步一步:

1 Openpyxl 打开 excel 电子表格。

2 查找带有 url 的列。

3 制作一个网址列表?

4 获取chrome打开第一个url。

6 查找密码字段。

7 输入一个对所有用户都相同的密码。

8 确认它登陆主页。

9 与列中的所有其他 url 循环直到结束。

10 如果有的话,最好得到一份报告来确认失败的次数。

到目前为止,这是我的代码:

# I can open the file
import openpyxl
wb=openpyxl.load_workbook('Test Sheet.xlsx')
type(wb)

# get the name of the sheet I need to work with
print (wb.sheetnames)

<Worksheet "Users">

# this line brings the current urls in my file 
sheet=wb['Users']
for x in range (2,4):
print(x,sheet.cell(row=x,column=3).value)

# output
2 https://firstfacebookpage.com
3 https://secondfacebookpage.com


# I found this other way to retrieve the urls from the excel spreadsheet.
ws = wb['Users']
column = ws['c']  
column_list = [column[x].value for x in range(len(column))]
print (column_list)

# output while having only 2 urls in the test sheet.
['Claim Link', 'https://somefacebookurl.com', 'https://someotherfacebookurl.com', None, None, None, 
None, None, None, None, None, None, None, None, None, None, None, None, None, None]

# This login, enter password, verify, close browser, works perfectly if I manually enter the url.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://firstfacebookpage.com")

password_box = driver.find_element_by_class_name('inputpassword') 
password_box.send_keys("theonepassword") 
print ("Password entered") 

login_box = driver.find_element_by_id('u_0_9') 
login_box.click() 

print ("Done") 
driver.close() 
print("Finished")

现在我想不出一种方法来使“driver.get”成为电子表格中的 url 并遍历这些登录步骤。由于我的文件将在列中包含 +4000 个 URL,因此我宁愿让脚本为我执行此操作。 任何帮助都感激不尽。

【问题讨论】:

  • 为什么需要使用 selenium 来读取 Excel 文件?你不能在没有 selenium 的情况下阅读它吗?使用python读取excel并将其存储到List/Array/Set中。
  • 我正在使用 openpyxl 读取 excel 文件,我想我可以用它做一些事情,然后让 selenium 打开网址。我认为模块可以相互通信,但这可能是一个菜鸟的想法。

标签: python excel selenium loops url


【解决方案1】:

你可以试试 pandas 和 xlrd,

import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException



df = pd.read_excel('myurls.xlsm') # Get all the urls from the excel
mylist = df['urls'].tolist() #urls is the column name

print(mylist) # will print all the urls

# now loop through each url & perform actions.
for url in mylist:
    driver = webdriver.Chrome()
    driver.get(url)

    try:
       WebDriverWait(driver, 3).until(EC.alert_is_present(),'Timed out waiting for alert.')

       alert = driver.switch_to.alert
       alert.accept()
       print("alert accepted")
    except TimeoutException:
       print("no alert")
    password_box = driver.find_element_by_class_name('inputpassword') 
    password_box.send_keys("theonepassword") 
    print ("Password entered")
    login_box = driver.find_element_by_id('u_0_9') 
    login_box.click() 
    driver.close()


print ("Done")

【讨论】:

  • 我理解这一行 mylist = df['Users'].tolist() #urls 是应该识别工作表的列名。我的工作表被称为“用户”,但它给出了一个 KeyError。我想复制错误日志,但它似乎包含的字符超出了允许范围。
  • Users 是列名。我已经更新了答案。很抱歉造成混乱
  • 现在它适用于列表中的第一个 url,但它在第二次出现“显示通知 - 允许 - 阻止”时停在主页上。然后它给出了一个错误“无法找到元素:输入密码”我猜它仍然试图在主页上登录,而不是关闭窗口并继续到列表中的下一个 url。但我不知道为什么。
  • 嗯。警报出乎意料。是用同一个浏览器一个一个打开url还是每次都用新的浏览器打开url?如果您每次都使用新浏览器,是否会出现警报。 ?
  • 如果通过“新浏览器”为您打开一个新窗口或标签,我想这将是理想的。不确定是否必须一一完成,或者我是否可以将其设置为一次处理 5 或 10 个网址。由于数量很大,因此可以节省很多时间。 “允许通知消息”出现两次,第二次是在第一个 URL 加载后,登录成功并登陆主页。此时浏览器应该关闭,重新打开并继续下一个 url。但是“允许通知”弹出仍然在屏幕上,脚本抛出有关“输入密码”的错误。
猜你喜欢
  • 2017-06-10
  • 2016-09-26
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 2016-09-22
相关资源
最近更新 更多