刚接触 Python 的 Selenium 不久,就想做个小玩具练练手。我写的玩具是登录淘宝,签到领取淘金币。
现在遇到的问题是,从「店铺签到」入口进入到各家店铺( eg. URL https://shop136560499.taobao.com/ugo.htm?spm=a217e.7759359.15285.2.pa4eVE&signin=true )后,想模拟点击「立即签到」,但是 click() 事件无效。
相关代码如下:
# 店铺签到
def shop_check_in(self):
urls = [
'https://nongfutechan.taobao.com/ugo.htm?spm=a217e.7759359.15285.1.4xE9Il&signin=true#ugo-jinbi',
'https://shop136560499.taobao.com/ugo.htm?spm=a217e.7759359.15285.2.muhVBy&signin=true#ugo-jinbi',
'https://shop33473134.taobao.com/ugo.htm?spm=a217e.7759359.15285.3.yW2N4E&signin=true#ugo-jinbi'
]
for url in urls:
self.driver.get(url)
time.sleep(5)
print("page_source\t%s" % self.driver.page_source)
self.driver.find_element_by_xpath('//a[@href="#" and @class="now-take J_NowSignIn" and text()="立即签到"]').click()
我尝试过的方法有:
- 增加 wait 时间,确保新页面已经完全加载
- 用 Google Chrome 的 XPath Helper 插件,确保自己写的 XPath selector 无误
- 打印源代码 driver.page_source ,确认页面内有「立即签到」这个元素,并且 XPath selector 无误
- 用鼠标右键 element.context_click() 测试,确认确实选中了「立即签到」这个元素
- 尝试用 ActionChains + element.send_keys(Keys.ESCAPE) + element.send_keys(Keys.ENTER) 等类似方式,尝试无效
- 尝试过 Chrome/FireFox 两种浏览器,尝试无效
实际测试过程中发现,只有极少数情形,模拟点击「立即签到」成功;其它大多数情形下, click() 事件都是无效的。
目前没有想到别的方法了……
一般而言, Selenium click() 无效,可能会是什么原因呢?
请大家帮忙分析下原因,指点一二?
谢谢大家。