>已经两天了:尝试通过消息自动向搜索结果中的多个人发送联系请求。登录并搜索后,迭代添加按钮有效,add_btn.click()
打开弹出窗口。但是,只有在第一个实例中,我才能成功地try:
find_element_by_name
访问<textarea name="reason">
并且可以element.send_keys()
插入我的消息。在第二次迭代中,我似乎无法访问消息表单,尽管当我打印driver.find_elements_by_xpath("//*[@name]")
的迭代时,<textarea name="reason">
存在。
我尝试捕获最常见的异常,但这似乎不起作用。
任何人都可以解释一下,1( 这里发生了什么以及为什么对所有命名元素的调用可以列出文本区域,但我找到它的特定调用不起作用,以及 2( 我如何解决这个问题。谢谢!
这是我用于浏览搜索结果的代码部分:
def contact(text):
add_btns=driver.find_elements_by_css_selector("a.searchResult-actionLink.foundation-icon-core-contact-add.contact-lightbox-link")
i=0
wanted=6
for add_btn in add_btns:
i+=1
try:
add_btn.click()
time.sleep(2)
driver.save_screenshot("add%s.png" % (i,)) ###works on every turn!
elems=driver.find_elements_by_xpath("//*[@name]")
for elem in elems:
print i, elem.tag_name, elem.get_attribute("name") ###prints out 'textarea reason' on every turn!
try:
mssgbrd = driver.find_element_by_name("reason")
print "mssgbrd found" ###prints only on first round???
mssgbrd.send_keys(text)
driver.save_screenshot("request%s.png" % (i,))
except ElementNotVisibleException:
print "not visible"
except StaleElementReferenceException:
print "stale"
except NoSuchElementException:
print "no such element"
except TimeoutException:
print "timed out"
except:
print "something else happens"
request=driver.wait.until(EC.presence_of_element_located(
(By.CSS_SELECTOR,"#crl-button-send-request > a.element-form-button-solid-lime")))
try:
request.click()
time.sleep(3)
except TimeoutException:
print("Button not found!")
driver.save_screenshot("ButtonError%s.png" % (i,))
except:
print "Request not working" ###prints out on second round and after
driver.save_screenshot("xibit%s.png" % (i,)) ###get's called on second round and after
当我运行此代码时,在第一次成功迭代后,我不断收到所有其他迭代的最后一个异常"请求不起作用"。我已经用关闭弹出窗口而不是发送请求close_button.click()
进行了测试 - 第二次迭代成功了。
我仍然无法评估问题是什么,但这就是它是如何解决的。也许比我更有经验的人知道发生了什么。
在我的原始代码中,我之前有一行text=unicode(text.decode("utf-8"))
try:
mssgbrd = driver.find_element_by_name("reason")
print "mssgbrd found"
为了简洁起见,我在这里的帖子中将其删掉,因为我认为这并不重要。孩子,是我错了吗...在试验时,我添加了两个print time.ctime()
实例,以了解可能的超时或等待期;一个在 UTF-8 解码和try:
块之间,一个在临界mssgbrd = driver.find_element_by_name("reason")
之后。
运行代码时,在第二次迭代中没有打印任何代码,这意味着代码甚至在尝试解码发生之前就以某种方式停止了mssgbrd = driver.find_element_by_name("reason")
。然后,我将解码移动到函数的顶部,并能够成功发送两条邀请消息。所以基本上,我问题中的函数应该可以正常工作,如果您要添加解码,第一行将如下所示:
def contact(text):
text=unicode(text.decode("utf-8"))
add_btns=driver.find_elements_by_css_selector("a.searchResult-actionLink.foundation-icon-core-contact-add.contact-lightbox-link")
i=0
wanted=6
for add_btn in add_btns:
i+=1
try:
add_btn.click()
time.sleep(2)
driver.save_screenshot("add%s.png" % (i,))
elems=driver.find_elements_by_xpath("//*[@name]")
for elem in elems:
print i, elem.tag_name, elem.get_attribute("name")
try:
mssgbrd = driver.find_element_by_name("reason")
print "mssgbrd found"
mssgbrd.send_keys(text)
driver.save_screenshot("request%s.png" % (i,))
except:
但是,我很想了解这里发生了什么。