python - 相同的代码,不同的计算机,不同的结果。Selenium 找不到网页元素
问题描述
制作了一个机器人来帮助在 Craigslist 上发帖。在我的 Mac 和我的电脑上,它可以很好地拾取 Web 元素并可以与它们进行交互。在我的工作电脑上,它根本找不到它们或与它们交互。我已经按类、xpath 和完整 xpath 完成了它,而这几乎是仅有的 3 个选项。此外,如果我让它继续过去,然后继续到下一页,它将与错误的元素交互。我已经检查了所有屏幕上的分辨率,所以它们匹配并且我束手无策。我添加了 2 个不断中断的功能。我在 try: except 块下的主循环中运行它们。postad 功能......好吧,它根本找不到元素和下拉菜单,它点击了错误的元素。但要明确的是,这些在我的 MAC 和我的 PC 上工作得很好,但是当我把它带到我的工作电脑上时,它一直在坏。我确保所有内容都已正确更新和安装。我知道我可以使用 pyautogui 但如果可能的话我希望只使用硒。但是我会尝试任何东西,有没有人可以帮助这个可怜的光滑大脑?
def postad(self):
#The login portion of the bot
post = self.browser.find_element_by_id("post")
self.browser.implicitly_wait(3)
time.sleep(random.randint(1, 2))
post.click()
house = self.browser.find_element_by_xpath("/html/body/article/section/form/ul/li[4]/label/span[1]/input")
house.click()
self.browser.implicitly_wait(3)
time.sleep(random.randint(2, 4))
house2 = self.browser.find_element_by_xpath('//*[@id="new-edit"]/div/label/label[2]/input')
house2.click()
self.browser.implicitly_wait(3)
def dropDowns(self):
time.sleep(0.5)
laundry = self.browser.find_element_by_xpath('//*[@id="ui-id-2-button"]/span[2]')
laundry.click()
time.sleep(random.randint(1, 3))
wd_in_unit = self.browser.find_element_by_id('ui-id-12')
wd_in_unit.click()
time.sleep(random.randint(1, 3))
parking = self.browser.find_element_by_xpath('/html/body/article/section/form/div/div/fieldset[1]/div/div[2]/label[3]/span/span[2]')
parking.click()
time.sleep(random.randint(1, 3))
carport = self.browser.find_element_by_id('ui-id-18')
carport.click()
time.sleep(random.randint(1, 3))
bedrooms = self.browser.find_element_by_xpath('/html/body/article/section/form/div/div/fieldset[1]/div/div[2]/label[4]/span/span[2]')
bedrooms.click()
time.sleep(random.randint(1, 3))
if self.choice == 1 :
onebd = self.browser.find_element_by_id('ui-id-27')
onebd.click()
elif self.choice == 2:
twobd = self.browser.find_element_by_id('ui-id-28')
twobd.click()
else:
threebd = self.browser.find_element_by_id('ui-id-29')
threebd.click()
bathrooms = self.browser.find_element_by_xpath('/html/body/article/section/form/div/div/fieldset[1]/div/div[2]/label[5]/span/span[1]')
bathrooms.click()
time.sleep(random.randint(1, 3))
if self.choice == 1:
onebth = self.browser.find_element_by_id('ui-id-38')
onebth.click()
else:
twobth = self.browser.find_element_by_id('ui-id-40')
twobth.click()
解决方案
推荐阅读
- sql - 想要计算从一个表到另一个表多列的累积百分比
- assembly - 如何使用 nios2 键入出现在 LED 中的文本
- sql-server - 在不删除的情况下刷新数据查看器并放置另一个?
- reactjs - 数据绑定类属性到反应组件
- angular - 如何在角度线1↵line2中显示新线
- python - 有什么方法可以让我的代码用 else 语句自行循环?
- c# - 具有验证规则的文本框仍会在面板移动到其顶部时显示
- python - 包含特征值的函数上的网格网格
- python - 无法在 django 中向用户模型添加两个外键
- powershell - 当它应该是 $False 时得到一个 $True