【发布时间】: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