Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python循环覆盖最后一次HTML写入_Python_Selenium - Fatal编程技术网

Python循环覆盖最后一次HTML写入

Python循环覆盖最后一次HTML写入,python,selenium,Python,Selenium,该脚本在“while True:”处循环,通过单击底部的“next”(下一步)按钮从多个页面中提取数据,但我不知道如何构造代码,以便在分页时继续写入HTML。相反,它会覆盖以前编写的html结果。谢谢你的帮助。谢谢 while True: time.sleep(10) golds = driver.find_elements_by_css_selector(".widgetContainer #widgetContent > div.singleCell") pr

该脚本在“while True:”处循环,通过单击底部的“next”(下一步)按钮从多个页面中提取数据,但我不知道如何构造代码,以便在分页时继续写入HTML。相反,它会覆盖以前编写的html结果。谢谢你的帮助。谢谢

while True:
    time.sleep(10)

    golds = driver.find_elements_by_css_selector(".widgetContainer #widgetContent > div.singleCell")
    print("found %d golds" % len(golds))  

    template = """\
        <tr class="border">
            <td class="image"><img src="{0}"></td>\
            <td class="title"><a href="{1}" target="_new">{2}</a></td>\
            <td class="price">{3}</td>
        </tr>"""

    lines = []

    for gold in golds:
        goldInfo = {}

        goldInfo['title'] = gold.find_element_by_css_selector('#dealTitle > span').text
        goldInfo['link'] = gold.find_element_by_css_selector('#dealTitle').get_attribute('href')
        goldInfo['image'] = gold.find_element_by_css_selector('#dealImage img').get_attribute('src')

        try:
            goldInfo['price'] = gold.find_element_by_css_selector('.priceBlock > span').text
        except NoSuchElementException:
            goldInfo['price'] = 'No price display'

        line = template.format(goldInfo['image'], goldInfo['link'], goldInfo['title'], goldInfo['price'])
        lines.append(line)

    try:
        #clicks next button
        driver.find_element_by_link_text("Next→").click()
    except NoSuchElementException:
        break

    time.sleep(10)

    html = """\
        <html>
            <body>
                <table>
                    <tr class='headers'>
                        <td class='image'></td>
                        <td class='title'>Product</td>
                        <td class='price'>Price / Deal</td>
                    </tr>
                </table>
                <table class='data'>
                    {0}
                </table>
            </body>
        </html>\
    """

    f = open('./result.html', 'w')
    f.write(html.format('\n'.join(lines)))
f.close()
为True时:
时间。睡眠(10)
golds=driver.find_elements_by_css_选择器(“.widgetContainer#widgetContent>div.singleCell”)
打印(“找到%d个黄金”%len(黄金))
模板=“”“\
\
\
{3}
"""
行=[]
对于黄金中的黄金:
goldInfo={}
goldInfo['title']=gold.find_element_by_css_selector('#dealTitle>span')。text
goldInfo['link']=gold.find_element_by_css_selector('#dealTitle')。get_属性('href'))
goldInfo['image']=gold.find_element_by_css_selector('dealImage img')。get_属性('src'))
尝试:
goldInfo['price']=gold.find_element_by_css_选择器('.priceBlock>span')。text
除无任何例外:
goldInfo['price']=“无价格显示”
line=template.format(goldInfo['image']、goldInfo['link']、goldInfo['title']、goldInfo['price'])
行。追加(行)
尝试:
#单击“下一步”按钮
驱动程序。通过链接文本(“下一步”)查找元素→").单击()
除无任何例外:
打破
时间。睡眠(10)
html=”“”\
产品
价格/交易
{0}
\
"""
f=打开('./result.html',w')
f、 写入(html.format('\n'.join(行)))
f、 关闭()

您应该通过

f = open('./result.html', 'a')

在脚本末尾打开文件时,请查看不同的模式:

mode最常用的值是'r'用于读取,'w'用于写入(如果文件已经存在,则截断该文件),以及'a'用于追加

还有更多

模式“r+”、“w+”和“a+”打开文件进行更新(读写);请注意,“w+”会截断文件。在区分二进制文件和文本文件的系统上,将“b”附加到模式以二进制模式打开文件;在没有此区别的系统上,添加“b”无效

因此,您有两个可用的选项。您可以使用
a
,因为您希望向其添加数据

或者,您可以将打开的文件移到循环之外,这样您就不会根据需要不断地重新打开文件

f = open('./result.html', 'w')
while True:
  # do stuff
  f.write (...)
f.close()

试着用
f=open('./result.html',w')
替换
f=open('./result.html',a')
谢谢Andersson,太好了。你想把它作为我能接受这个答案的答案吗?我想这会提供更多信息