gpt4 book ai didi

python - 迭代文本文件,如何继续循环中的下一行?

转载 作者:太空宇宙 更新时间:2023-11-03 21:35:03 25 4
gpt4 key购买 nike

我是 python 新手,在让我的脚本执行我需要的操作时遇到一些困难,我需要一些帮助。我的代码可能也可以更好地排序,如果它很困惑,我很抱歉。整个脚本只是自动执行手动任务。步骤如下:

  1. 打开带有两个选项卡的浏览器
  2. 登录两个网站,每个选项卡中一个
  3. 读取并复制文本文件 test.txt 中的第一行,其中包含电子邮件
  4. 将第一行的值粘贴到网页 1 上的文本字段,然后按 RETURN
  5. 使用 selenium 获取网页1上的一些数据
  6. 它将值粘贴到网页2上并在网页2上发送短信7.复制网页2的输出
  7. 打开第三个网址,并粘贴网页 2 的输出
  8. 重复第 3 步(?)

所有这些目前都很有效,但是当整个脚本完成后,我希望它返回到步骤 3,但这次读取文本文件中的第 2 行。在阅读第 3 行之前再次执行步骤 3-8,依此类推。我该怎么做?

我的想法是,我有一个 .txt 文件,其中包含许多电子邮件地址,每行一个,我的脚本在每个单独的地址上执行此过程。如果可能的话,我还希望脚本在读取后在每一行附加“-成功”。因此脚本将运行 x 次,具体取决于 test.txt 中有多少行如果可能的话,最好也有一些错误处理,即如果有任何错误,则移至文件中的下一行。

这是我的完整代码,我必须删除 URL 和一些敏感值,我希望它是可以理解的。我遇到问题的部分突出显示如下:

    # coding=UTF-8
import clipboard
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException


def login():
## Define logins for#
usernameB = ''
passwordB = ''
userMaestro = ''
passMaestro = ''

driver.switch_to_window(driver.window_handles[0])
driver.get(first_url)
## Perform login in B ##
username = driver.find_element_by_id('ctl00_logincontent_username_f')
username.send_keys(usernameB)
password = driver.find_element_by_id('ctl00_logincontent_password_f')
password.send_keys(passwordB)
loginButton = driver.find_element_by_id('ctl00_logincontent_submit')
loginButton.click() ##

driver.switch_to_window(driver.window_handles[1])
driver.get(second_url)

#### Perform login in Maestro
usernameM = driver.find_element_by_name('username')
usernameM.send_keys(userMaestro)
passwordM = driver.find_element_by_name('password')
passwordM.send_keys(passMaestro)
loginMaestro = driver.find_element_by_name('submit')
loginMaestro.click()


def searchB():

driver.switch_to_window(driver.window_handles[0]) # Use first tab
## Search function ##
emailSearch = driver.find_element_by_id('quicksearchinput')
with open('C:\\Users\\user\\test.txt','r') as f:
for email in f:
emailSearch.send_keys(email, Keys.RETURN)
sendSMS()


def sendSMS():
try:
kundenummer = driver.find_elements_by_tag_name('dd')[2].text # Grabs value from instersting tag.
telefon = driver.find_elements_by_tag_name('dd')[4].text # Grabs value from interesting tag.
except NoSuchElementException as exception:
print "Element not found. Getting next email"
searchBrikks()
mailerText = "He"

## SEND SMS ##
driver.switch_to_window(driver.window_handles[1])
driver.get(second_url)
driver.find_element_by_name('til').send_keys(telefon)
driver.find_element_by_id('msgtxt').send_keys(mailerText)
driver.find_element_by_xpath('//input[@value="Send SMS"]').click() ## We use this to send the SMS once done.
smsRef = driver.find_elements_by_tag_name('strong')[1].text # Copies the output SMS-Ref.
print('Successfully sent SMS and copied the referance number for log. ')
addnoteBrikks()


def addnoteBrikks():

smsRef = driver.find_elements_by_tag_name('strong')[1].text # Copies the output SMS-Ref.
driver.switch_to_window(driver.window_handles[0]) # Goes to B
kundenummer = driver.find_elements_by_tag_name('dd')[2].text # Grabs ID for URL
telefon = driver.find_elements_by_tag_name('dd')[4].text # Grabs value from interesting tag.

driver.get(third_url+kundenummer) # Goes to "add note" on customer in B
fullDraft = 'SMS sendt til:'+ telefon + '. Kundenummer oppgitt: ' +kundenummer + '\n' + smsRef
shortDraft = 'Mailer-daemon, SMS Sendt. Ref:' +str(smsRef) #For subject in Brikks. Add SMS-ref?

emneBrikks = driver.find_element_by_id('ctl00_maincontent_uiSubject_f')
emneBrikks.send_keys(shortDraft)
bodyBrikks = driver.find_element_by_id('ctl00_maincontent_uiBody_f')
bodyBrikks.send_keys(fullDraft)

createTicket = driver.find_element_by_id('ctl00_maincontent_save')
createTicket.click() #Create the ticket in Brikks
searchB()


first_url = "https://"
second_url = "http://"
third_url = "https:"

driver = webdriver.Chrome(executable_path=r"chromedriver.exe")
driver.execute_script('window.open("{}");'.format(''))


def main():
login()
searchB()
driver.switch_to_window(driver.window_handles[1])
smsRef = driver.find_elements_by_tag_name('strong')[1].text # Copies the output SMS-Ref.


if __name__ == '__main__':
main()

我怎样才能在这里实现我想要的?感谢任何帮助!

编辑:

所以我感兴趣的部分是:

 def searchBrikks():

driver.switch_to_window(driver.window_handles[0]) # Use first tab
## Search function ##
emailSearch = driver.find_element_by_id('quicksearchinput')
with open('C:\\Users\\user\\test.txt','r') as f:
for email in f:
emailSearch.send_keys(email, Keys.RETURN)
sendSMS()
### What to write further here? ###

如何让它在下次调用 searchB() 时读取第 2 行?

最佳答案

我看到的第一件事是,每次调用 searchB() 时,您都会循环遍历 test.txt 文件的全部内容。

with open('C:\\Users\\user\\test.txt','r') as f:
for email in f:

直到到达 EOF 才会停止。不要将循环放在 searchB() 函数中,而是将其放在 main 函数中,这样您就可以拥有更多控制权并在函数中的任何行上调用 searchB()你想要的 test.txt 文件。

对于日志记录,您需要查看 logging库,它允许您指定日志文件并在写入内容或调用失败后放置日志消息。将 - success 附加到行尾会非常烦人。

关于python - 迭代文本文件,如何继续循环中的下一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53286730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com