【问题标题】:Python selenium script acts weird with Crontab on LinuxPython selenium 脚本在 Linux 上与 Crontab 的行为很奇怪
【发布时间】:2019-02-24 02:05:44
【问题描述】:

您好,我有这个 selenium 脚本(在 Raspian 上使用 firefox 和 geckodriver),它基本上使用外部站点为 Instagram 上的任何给定用户下载活动故事:

def download_user_stories(self, user_name):
        driver = self.driver


        driver.get("https://storiesig.com/stories/"+user_name)
        time.sleep(2)



        for i in range(1,50):
            try:
                xpath = "//div[@class='jsx-1407646540 container']//article[" + str(i) + "]//div[3]//a[1]"
                print(xpath)
                link_location = driver.find_element_by_xpath(xpath)
                link = link_location.get_attribute('href')


                current_time = datetime.datetime.now()
                corrected_time = current_time.strftime("%Y-%b-%d")

                if '.mp4' not in link: 
                    extension = '.jpg'
                else:
                    extension = '.mp4' 

                location = '/Users/"my name"/desktop/'+ user_name + '/' + corrected_time + '-' + str(i) + extension

                print (location) 

                urllib.urlretrieve(link,location)

            except Exception as e:
                print("went to except")
                print (e)
                break

我最初通过终端运行它,它运行良好。然后我通过树莓派上的 crontab 安排了它,它运行了,将错误输出到一个文本文件,我得到了这个:

working on "friends name" now
//div[@class='jsx-1407646540 container']//article[1]//div[3]//a[1]
/home/pi/Desktop/InstaScraper/Script/"friends name"/2019-Feb-21-1.jpg
//div[@class='jsx-1407646540 container']//article[2]//div[3]//a[1]
went to except
Message: Unable to locate element: //div[@class='jsx-1407646540 container']//article[2]//div[3]//a[1]

所以它找到了第一个下载链接,但没有设法找到其余的链接,即使我确认这个特定用户还有更多要下载。我还确认 它最后无法定位的元素正是要下载的下一个元素的 XPath。所以我很困惑为什么它没有找到一个确切的故事应该在哪里。奇怪的是,即使它最初是这样,它也不再通过终端正常运行。我不明白发生了什么变化,或者为什么它不像在终端中那样在 crontab 中工作。

另一个有趣的注意事项是它会为 User_Name_List.txt 中的第一个用户正确下载所有链接,但不会为其余用户下载。 (该函数从具有用户名列表的类中的另一个函数循环调用)

我已经用谷歌搜索了这个并考虑了它,但我无法弄清楚这里有什么问题。

任何帮助和解释将不胜感激。

注意 - 如果您认为可能的话,您可以访问 storiesig.com 并自行查看相关 XPath 系统以获取各种活动故事(不是亮点)下载链接问题出在哪里。

【问题讨论】:

  • 你想把 jsx-1407646540 从你的 xpath 中去掉,当他重新部署时这些会改变。
  • 请显示您的所有代码。什么是用户名?你是如何实例化驱动程序的?你遗漏了太多
  • 另外,你为什么要使用 selenium 来解析内容中的一些 href?
  • @CoreyGoldberg 我不熟悉漂亮的汤和其他仅获取所需 href 的方法。 user_name 是该用户的 Instagram 名称的字符串。
  • @CoreyGoldberg 使用驱动程序实例化:options = Options() options.headless=True self.driver = webdriver.Firefox(options=options, executable_path=r'/usr/bin/geckodriver')跨度>

标签: python selenium xpath cron geckodriver


【解决方案1】:

从相对 XPath 切换到绝对 XPath 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2014-10-06
    • 2015-10-17
    • 1970-01-01
    • 2016-01-04
    • 2019-12-21
    • 2015-12-03
    相关资源
    最近更新 更多