Python 刮痧;Selenium:如何在循环中调用方法

Python 刮痧;Selenium:如何在循环中调用方法,python,selenium,scrapy,web-crawler,Python,Selenium,Scrapy,Web Crawler,我已经在这里发现了类似的问题,但我的爬虫程序仍然没有运行 我正试图抓取几个我从txt.NET文件中提取的URL。 这工作正常。但是,scrapy/selenium会逐个打开每个URL的浏览器,但不会运行“爬行提示”功能。仅针对my txt.file中的最后一个URL,执行defcrawltips(self,response):中的代码 如何为txt.file中的每个URL调用“crawltips”函数 class AlltipsSpider(Spider): name = 'allcla

我已经在这里发现了类似的问题,但我的爬虫程序仍然没有运行

我正试图抓取几个我从txt.NET文件中提取的URL。 这工作正常。但是,scrapy/selenium会逐个打开每个URL的浏览器,但不会运行“爬行提示”功能。仅针对my txt.file中的最后一个URL,执行def
crawltips(self,response):
中的代码

如何为txt.file中的每个URL调用“crawltips”函数

class AlltipsSpider(Spider):
    name = 'allclasses'
    allowed_domains = ['dummy.com']



    def start_requests(self):

        self.driver = webdriver.Chrome('C:\webdrivers\chromedriver.exe')
        with open("urls.txt", "rt") as f:
            start_urls = [l.strip() for l in f.readlines()]

        for url in start_urls:
            self.driver.get(url)
            self.driver.find_element_by_id('currentTab').click()
            self.driver.find_element_by_xpath('//*[@id="_blog-menu"]/div[2]/div/div[2]/a[3]').click()
            yield Request(self.driver.current_url, callback=self.crawltips)


    def crawltips(self, response):


        sel = Selector(text=self.driver.page_source)
        allposts = sel.xpath('//*[@class="block media _feedPick feed-pick"]')
        for post in allposts:
            username = post.xpath('.//div[@class="col-sm-7 col-lg-6 no-padding"]/a/@title').extract()
            publish_date = post.xpath('.//*[@class="bet-age text-muted"]/text()').extract()


            yield{'Username': username,
                'Publish date': publish_date                
                }

据我所知,WebDriver一次只能关注一个选项卡(窗口)。运行循环时,选择最后一个URL并在那里执行函数

对于解决方案,您必须根据URL计数找到选项卡的数量,并在完成下一个URL后切换回每个URL

例如:

  • 浏览器。通过标记名称(“正文”)查找元素。发送键(keys.CONTROL+keys.TAB)
    -移动到新选项卡并积极处理它。(使用
    键。SHIFT
    用于backword选项卡)
  • driver.switch\u to.window(driver.window\u句柄[i])
    -使用制表符计数(i)

目前它只使用一个选项卡。首先,它在一个选项卡中打开第一个URL,然后转到第二个URL,依此类推……在这种情况下,您必须使用sleep()检查页面中响应和元素的可用性。确保每个案例都经过完整的代码场景。域对于所有URL都是相同的吗?Jep,它对于所有URL都是相同的域。这正是问题所在-我如何确保每个URL都贯穿整个脚本?你能发布一些URL以便我进行测试吗?我建议查看。然后,您应该能够将驱动程序代码替换为
SeleniumRequest
s