遍历Selenium WebElement

时间:2018-11-07 21:17:20

标签: python selenium

我没有从下面的迭代中获得预期的结果。问题是 browser.find_element_by_xpath 函数(下面代码的第四行)中的迭代值未更新。它总是产生第一个结果。请注意,通过依次将值1,2,3,4分配给变量review_num而不是使用参数+ str(review_num)

来手动运行迭代时,可以得到预期的结果。
    review_num = 0
    for review_num in range(216):   # for every review
        review_num = review_num + 1
        fixedelement = browser.find_element_by_xpath('//*[@id="collapseReviews"]/div/div[2]/div[2]/div[1]/div["+ str(review_num)"]')
        #fixedelement = browser.find_element_by_xpath('//*[@id="collapseReviews"]/div/div[2]/div[2]/div[1]/div[1]')
        #fixedelement = browser.find_element_by_xpath('//*[@id="collapseReviews"]/div/div[2]/div[2]/div[1]/div[2]')
        #fixedelement = browser.find_element_by_xpath('//*[@id="collapseReviews"]/div/div[2]/div[2]/div[1]/div[3]')
        #fixedelement = browser.find_element_by_xpath('//*[@id="collapseReviews"]/div/div[2]/div[2]/div[1]/div[4]')
        R_title = fixedelement.find_element_by_xpath('./h4')
        R_author = fixedelement.find_element_by_xpath('./div[2]/p[1]/span')
        R_stars = fixedelement.find_element_by_xpath('./div[1]/div[1]/div[1]/span')
        R_date = fixedelement.find_element_by_xpath('./div[1]/div[1]/div[2]/small')
        R_comment = fixedelement.find_element_by_xpath('./div[1]/div[3]')
        R_Yesvotes = fixedelement.find_element_by_xpath('./div[2]/div/div[1]/a[1]/span')
        R_Novotes = fixedelement.find_element_by_xpath('./div[2]/div/div[1]/a[2]/span')

        R_title_text = R_title.text
        R_author_text = R_author.text
        R_stars_text = R_stars.text
        R_date_text = R_date.text
        R_comment_text = R_comment.text
        R_Yesvotes_text = R_Yesvotes.text
        R_Novotes_text = R_Novotes.text
        print(R_author_text)
        with open(csvfile, "a", newline='', encoding='utf-8') as output:
            writer = csv.writer(output, dialect='excel')
            # writer.writerow(["namerow_id", "Name", "Position_Location"])
            writer.writerow([review_num, R_title_text, R_author_text, R_stars_text, R_date_text, R_comment_text, R_Yesvotes_text, R_Novotes_text])

1 个答案:

答案 0 :(得分:2)

在线

mean.binaryproto

您要搜索xpath等于

的元素
fixedelement = browser.find_element_by_xpath('//*[@id="collapseReviews"]/div/div[2]/div[2]/div[1]/div["+ str(review_num)"]')

'//*[@id="collapseReviews"]/div/div[2]/div[2]/div[1]/div["+ str(review_num)"]' 硬编码到xpath中。

您想做类似的事情

"str(review_num)"