在Python中使用循环后变量[selenium]
我试图打印在Python中使用循环后变量[selenium],python,selenium,for-loop,Python,Selenium,For Loop,我试图打印quality或循环后的任何变量,但它不起作用。它只在循环之前工作。我如何使用它? 我想将包含所有这些详细信息的get请求发送到链接 导入时间 从selenium导入webdriver 从selenium.webdriver.common.keys导入密钥 driver=webdriver.Firefox() 对于范围(1,2)内的x: 驱动程序。获取(“http://sparo.live/movies?page=%d“%(x)) text=driver.通过xpath(“div[@
quality
或循环后的任何变量,但它不起作用。它只在循环之前工作。我如何使用它?
我想将包含所有这些详细信息的get请求发送到链接
导入时间
从selenium导入webdriver
从selenium.webdriver.common.keys导入密钥
driver=webdriver.Firefox()
对于范围(1,2)内的x:
驱动程序。获取(“http://sparo.live/movies?page=%d“%(x))
text=driver.通过xpath(“div[@class='boxALL']/article/a”)查找元素
打印(len(文本))
数组=[]
信息=[]
对于文本中的链接:
links=link.get_属性(“href”)
array.append(链接)
对于数组中的i:
驱动程序。获取(i)
title=driver.find_element_by_xpath(“./*[@id='wrapper']/div/div/div[1]/h1”)
english_title=driver.find_element_by_xpath(“./*[@id='wrapper']]/div/div/div[1]/h2”)
year=driver.通过xpath(“./*[@id='wrapper']/div/div/div[1]/div[2]”查找元素
genrs=driver。通过xpath(“./*[@id='wrapper']/div/div/div[5]/div[1]/span[1]”查找元素
description=driver.find_element_by_xpath(“./*[@id='wrapper']/div/div/div[5]/div[9]/p”)
preimg=driver.find_element_by_xpath(“./*[@id='wrapper']/div/div/div[1]/div[1]/img”)
img=preimg.get_属性(“src”)
quallity=driver。通过xpath查找元素(“./*[@id='tab-content1']/div/div[3]/a/div[1]/p[2]”)
pretrailer=driver.find_element_by_xpath(“./*[@id='wrapper']/div/div/div[6]/ul/li/iframe”)
trailer=pretrailer.get_属性(“src”)
prelinks=driver.find_element_by_xpath(“./*[@id='tab-content1']]/div/div[3]/a”)
watchonclick=prelinks.get_属性(“onclick”)
watchlink=watchonclick.replace('open','location.replace'))
驱动程序。执行_脚本(watchlink)
find_div=driver.find_elements_by_xpath(“//div[@class='box']]/div[2]/a”)
对于find_div中的div:
链接到\u watch=div.get\u属性(“href”)
打破
打印(“质量:'%s”。%quallity.text)
如果要打印循环外的结果,必须将结果存储在某个位置:
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
quality=[] #edited line
for x in range(1, 2):
driver.get("http://sparo.live/movies?page=%d" % (x))
text = driver.find_elements_by_xpath("//div[@class='boxALL']/article/a" )
print (len(text))
array = []
info = []
for link in text:
links = link.get_attribute("href")
array.append(links)
for i in array:
driver.get(i)
title = driver.find_element_by_xpath(".//*[@id='wrapper']/div/div/div[1]/h1")
english_title = driver.find_element_by_xpath(".//*[@id='wrapper']/div/div/div[1]/h2")
year = driver.find_element_by_xpath(".//*[@id='wrapper']/div/div/div[1]/div[2]")
geners = driver.find_element_by_xpath(".//*[@id='wrapper']/div/div/div[5]/div[1]/span[1]")
description = driver.find_element_by_xpath(".//*[@id='wrapper']/div/div/div[5]/div[9]/p")
preimg = driver.find_element_by_xpath(".//*[@id='wrapper']/div/div/div[1]/div[1]/img")
img = preimg.get_attribute("src")
quallity = driver.find_element_by_xpath(".//*[@id='tab-content1']/div/div[3]/a/div[1]/p[2]")
quality.append(quallity.text) #edited line
pretrailer = driver.find_element_by_xpath(".//*[@id='wrapper']/div/div/div[6]/ul/li/iframe")
trailer = pretrailer.get_attribute("src")
prelinks = driver.find_element_by_xpath(".//*[@id='tab-content1']/div/div[3]/a")
watchonclick = prelinks.get_attribute("onclick")
watchlink = watchonclick.replace('open', 'location.replace')
driver.execute_script(watchlink)
find_div = driver.find_elements_by_xpath("//div[@class='box']/div[2]/a" )
for div in find_div:
links_to_watch = div.get_attribute("href")
break
for quality_type in quality:
print(quality_type)
输出:
HD
HD
HD
HD
HD
HD
HD
HD
HD
BDRip
当然,如果代码曾经进入内部循环,
quallity
会被打印出来,您可以在循环后自由使用它。如果不是,那是因为array
每次都有长度0
,这只能是因为text
同样有长度0
。试着打印出这些变量,看看你是否发现了与预期不同的东西。我想你是for
循环的忠实粉丝:)x在范围(1,2)中的有什么意义?在第一次迭代后(在find_div
中的div的中)中断循环有什么意义?@Andersson我正在学习我的第一个脚本,range1,2需要从X页转到Y页,但我正在调试,所以它只有1页。需要注意的是,检索循环中元素的文本才是成功的原因。如果您改为quality.append(quallity)
则以后无法在qaulity:print(q.text)
中为q执行此操作。原因是Selenium在被请求之前不会从页面获取数据。这意味着当一个新页面被导航到或其他东西使DOM发生变化时,元素不再有效。OP的代码在每个循环中加载一个页面,因此保存对元素的引用将不起作用