刚接触 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()
我尝试过的方法有:
实际测试过程中发现,只有极少数情形,模拟点击「立即签到」成功;其它大多数情形下, click() 事件都是无效的。
目前没有想到别的方法了……
一般而言, Selenium click() 无效,可能会是什么原因呢?
请大家帮忙分析下原因,指点一二?
谢谢大家。
2
lilydjwg 2016-11-18 21:14:30 +08:00 1
可能是时序方面的原因?你点早了?
|
3
Nostalgia OP @lilydjwg 哇哦,仙子在线哟。
应该不是时间的问题,我 time.sleep() 设置了延时,确保页面已经加载完成了。 另外,用 ActionChains.context_click() 测试,发现鼠标右键确实放在了相应的 element 上。 |
4
lilydjwg 2016-11-18 21:48:20 +08:00 1
我不会用 Selenium ……在页面加载完之后,选择器没错。你把你程序执行时的元素打印出来看看获取到了没?请求发出去了没?
不过你何不通过抓包来看怎么发请求呢? |
5
misaka19000 2016-11-18 21:54:21 +08:00
头像太可怕了🤢
|
6
Nostalgia OP @lilydjwg 哈哈,以为你啥都会呢。:-)
不通过发 HTTP 请求的方式是因为淘宝这类网站登陆太复杂,而且很多操作涉及到很多 JS 代码,光靠 urllib/requests 之类的不行。 还是很谢谢仙子,笑口常开,常喜乐。 |
7
Nostalgia OP @misaka19000 瞎说什么大实话。
|
8
holajamc 2016-11-18 22:01:11 +08:00 1
driver.implicitly_wait() 或者 WebDriverWait(driver, 10).until()
第一个是隐式等待;第二个是显式等待,可以等待某一个元素加载完成,推荐去虫师的博客翻翻 |
11
holajamc 2016-11-18 22:08:23 +08:00 1
@Nostalgia
//*[@id="ugo-jinbi"]/div/div[2]/div[1]/div/div[2]/p[1]/a #ugo-jinbi > div > div.act-module-bd > div.act-jinbi-take > div > div.J_SignInCon > p.today-can-do > a 用 Chrome 复制出来的~试试换一下 xpath 或者用 css 选择器~ |
14
unfurl 2016-11-18 22:30:11 +08:00
相信不是楼主 selenium 使用的问题
|
15
unfurl 2016-11-18 22:31:05 +08:00 1
我不记得在哪个场合听说过,淘宝的前端能精确识别非人类的操作, so....
|
16
bbxiong 2016-11-19 00:03:38 +08:00 1
你试试点击浏览器式浏览器前台,发现 click 有些地方浏览器必须前台才能用......
|
17
Nostalgia OP @unfurl 感觉除了 referer 及操作时间间隔以外, Selenium 与普通的用户点击没有什么区别吧……
|
19
Nostalgia OP |