使用 Python 在运行时将 selenium 结果/输出保存在文本文件中
Posted
技术标签:
【中文标题】使用 Python 在运行时将 selenium 结果/输出保存在文本文件中【英文标题】:Saving selenium results/output at run time in text file using Python 【发布时间】:2019-07-04 06:35:36 【问题描述】:我正在使用 Selenium 在 Python3 中运行一个脚本。我得到了我期望的输出。现在,我想将我的输出保存到文本、csv
或 json
文件中。当我尝试运行我的脚本并将结果保存到一个文件时,我收到一个错误,open('bangkok_vendor.txt','a')
as wt
:
TypeError:“NoneType”对象不可调用
这意味着程序中的循环只运行一次,并且不会将数据存储在名为bangkok_vendor.txt
的文件中。在普通的 python 刮板程序中,存储数据不会有任何问题,但这是我第一次使用selenium
。你能帮我解决一下吗谢谢。
我正在尝试从我的终端命令运行此脚本,输出是要保存为任何文件格式的内容:
from selenium import webdriver
from bs4 import BeautifulSoup as bs
import csv
import requests
contents =[]
filename = 'link_business_filter.csv'
def copy_json():
with open("bangkok_vendor.text",'w') as wt:
for x in script2:
wt.writer(x)
wt.close()
with open(filename,'rt') as f:
data = csv.reader(f)
for row in data:
links = row[0]
contents.append(links)
for link in contents:
url_html = requests.get(link)
print(link)
browser = webdriver.Chrome('chromedriver')
open = browser.get(link)
source = browser.page_source
data = bs(source,"html.parser")
body = data.find('body')
script = body
x_path = '//*[@id="react-root"]/section/main/div'
script2 = browser.find_element_by_xpath(x_path)
script3 = script2.text
#script2.send_keys(keys.COMMAND + 't')
browser.close()
print(script3)
【问题讨论】:
【参考方案1】: 您需要将script2
作为copy_json
函数的参数传递,并在从页面中提取数据时调用它。
将w
rite模式更改为a
ppend,否则每次调用copy_json
函数都会重置文件。
不要覆盖像open
这样的内置函数,否则一旦进入第二次迭代,您将无法打开文件写入数据。
我稍微重构了你的代码:
LINK_CSV = 'link_business_filter.csv'
SAVE_PATH = 'bangkok_vendor.txt'
def read_links():
links = []
with open(LINK_CSV) as f:
reader = csv.reader(f)
for row in reader:
links.append(row[0])
return links
def write_data(data):
with open(SAVE_PATH, mode='a') as f:
f.write(data + "\n")
if __name__ == '__main__':
browser = webdriver.Chrome('chromedriver')
links = read_links()
for link in links:
browser.get(link)
# You may have to wait a bit here
# until the page is loaded completely
html = browser.page_source
# Not sure what you're trying to do with body
# soup = BeautifulSoup(html, "html.parser")
# body = soup.find('body')
x_path = '//*[@id="react-root"]/section/main/div'
main_div = browser.find_element_by_xpath(x_path)
text = main_div.text
write_data(text)
# close browser after every link is processed
browser.quit()
【讨论】:
以上是关于使用 Python 在运行时将 selenium 结果/输出保存在文本文件中的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 在 Selenium 中运行 javascript
无法使用 unittest 使用 python 运行 selenium