相关疑难解决方法(0)

如何在 Selenium Chrome Python 中设置窗口大小

以下用于调整 selenium chrome 窗口大小的代码不起作用:

driver.set_window_size(1920, 1080)
time.sleep(5)
size = driver.get_window_size()
print("Window size: width = {}px, height = {}px.".format(size["width"], size["height"]))
Run Code Online (Sandbox Code Playgroud)

其输出为:

Window size: width = 1044px, height = 788px
Run Code Online (Sandbox Code Playgroud)

我还尝试使用选项来设置驱动程序创建时的窗口大小(以及许多其他内容,参见下面的评论),但也无法使其工作:

options.add_argument("--window-size=1920,1080")
Run Code Online (Sandbox Code Playgroud)

我正在使用 selenium 3.14.0,chrome 驱动程序版本 72.0.3626.109 并在后台/无头模式下运行:我确实需要在后台运行我的代码,这意味着它会在后台自动启动。我认为无头(启动时与特定用户相关联)和背景(也是无头但可能不与特定用户相关联并且可能有其他特质)之间存在细微的区别 - 我开始认为这可能成为我的问题的一部分。

我想让 chrome 驱动程序工作,因为 firefox 不在后台运行(我需要),而 ie 很痛苦。

我想解决这个问题,因为当窗口很小时我看不到需要单击的元素。

python selenium google-chrome selenium-chromedriver google-chrome-headless

10
推荐指数
4
解决办法
3万
查看次数

Selenium Chrome Webdriver 进程在本地工作但不在 Heroku 上工作

因此,我有以下在本地正常工作的 Selenium Chrome Webdriver 进程。基本上,当运行以下代码时,会通过 Best Buy 进行购买,并且会从我的 Twilio 电话号码向我发送一条 SMS 消息,指示购买是否成功。全部大写的变量已经定义。我也没有包括进口。同样,以下代码在本地运行时使购买成功。这意味着我从 Twilio 电话号码收到的 SMS 消息包含“成功!” 每次在本地运行以下代码:

client = Client(ACCOUNT_SID, AUTH_TOKEN)
def runBestBuyBotLocal():
    driver = webdriver.Chrome()
    driver.get("https://www.bestbuy.com/site/spongebob-squarepants-mini-plush-styles-may-vary/6404213.p?skuId=6404213")
    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.presence_of_element_located((By.XPATH, "/html/body[@class='size-l']/div[@class='pl-page-content']//div[@class='container-v2']/div[@class='row v-m-bottom-g']/div[2]//div[@class='col-xs-12']/div[6]/div[@class='None']/div/div/div/button[@type='button']")))
    element.send_keys(Keys.RETURN)
    element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@class='c-portal']/div[@role='dialog']/div[1]/div[@role='dialog']/div[@role='document']//a[@role='button']")))
    element.send_keys(Keys.RETURN)
    element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@id='cartApp']/div[@class='page-spinner page-spinner--out']/div[@class='large-view size-l']//div[@class='fluid-large-view']//section[@class='fluid-large-view__sidebar']//button[@type='button']")))
    element.send_keys(Keys.RETURN)
    element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='fld-e']")))
    element.send_keys(EMAIL)
    element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='fld-p1']")))
    element.send_keys(PASSWORD)
    element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@class='cia-app-container']/div[@class='cia-actual-full-page-wrapper lv']/section/main[@class='cia-wrapper container']//form/div[3]/button")))
    element.send_keys(Keys.RETURN)
    driver.execute_script("arguments[0].scrollIntoView(true);", WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='credit-card-cvv']"))))
    element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='credit-card-cvv']")))
    element.send_keys(CVV)
    driver.execute_script("arguments[0].scrollIntoView(true);", WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "/html//div[@id='checkoutApp']/div[@class='page-spinner page-spinner--out']/div[1]/div[1]//div[@class='checkout__container …
Run Code Online (Sandbox Code Playgroud)

python selenium heroku selenium-chromedriver google-chrome-headless

6
推荐指数
1
解决办法
2095
查看次数

Selenium Firefox headless 返回不同的结果

当我抓取包含使用无头选项的产品的页面时,我得到不同的结果。
对于同一问题,一次我得到的结果未排序,另一次得到正确排序的结果。

硒火狐浏览器:

firefox_options = Options()
firefox_options.headless = True
browser = webdriver.Firefox(options=firefox_options, executable_path=firefox_driver)
Run Code Online (Sandbox Code Playgroud)

根据这篇文章:
“当使用无头选项时,Firefox 不会发送不同的标头”。

如何使用无头选项从抓取中获得恒定的结果?

更新:

事实证明,广告弹出窗口隐藏了价格排序菜单。通过设置DebanjanB发布的恒定窗口大小,问题得到了解决。

感谢您的任何建议

python selenium headless-browser geckodriver firefox-headless

5
推荐指数
1
解决办法
6755
查看次数

Selenium 适用于 AWS EC2 但不适用于 AWS Lambda

我已经查看并尝试了几乎所有关于此主题的其他帖子,但都没有成功。

EC2

我正在使用,python 3.6所以我正在使用以下 AMI amzn-ami-hvm-2018.03.0.20181129-x86_64-gp2(请参阅此处)。通过 SSH 连接到我的 EC2 后,我使用以下命令下载 Chrome:

sudo curl https://intoli.com/install-google-chrome.sh | bash
cp -r /opt/google/chrome/ /home/ec2-user/
google-chrome-stable --version
# Google Chrome 86.0.4240.198 
Run Code Online (Sandbox Code Playgroud)

并下载并解压缩匹配的 Chromedriver:

sudo wget https://chromedriver.storage.googleapis.com/86.0.4240.22/chromedriver_linux64.zip
sudo unzip chromedriver_linux64.zip
Run Code Online (Sandbox Code Playgroud)

我安装python36selenium使用:

sudo yum install python36 -y
sudo /usr/bin/pip-3.6 install selenium
Run Code Online (Sandbox Code Playgroud)

然后运行脚本:

import os
import selenium
from selenium import webdriver

CURR_PATH = os.getcwd()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--window-size=1280x1696')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('--enable-logging')
chrome_options.add_argument('--log-level=0')
chrome_options.add_argument('--v=99')
chrome_options.add_argument('--single-process')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--remote-debugging-port=9222') …
Run Code Online (Sandbox Code Playgroud)

python selenium amazon-web-services selenium-webdriver

5
推荐指数
2
解决办法
1350
查看次数

org.openqa.selenium.ElementClickInterceptedException:在无头模式下使用 Selenium 和 Java 截获元素点击错误

我有一个项目,我正在使用 java 和 selenium。在 UI 模式下测试工作正常。但是在无头模式下我收到此错误

org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <label _ngcontent-yrc-c26="" formcontrolname="reportingDealPermission" nz-checkbox="" class="ant-checkbox-wrapper ng-untouched ng-pristine ng-valid" ng-reflect-name="reportingDealPermission">...</label> is not clickable at point (161, 562). Other element would receive the click: <div _ngcontent-yrc-c26="" class="footer">...</div>
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题(在 UI 模式下工作)。这是我的代码

WebDriver driver = getWebDriver();
        WebElement element;
        Thread.sleep(60000);
        element = driver.findElement(By.xpath("//label[@formcontrolname='reportingDealPermission']"));
        element.click();
Run Code Online (Sandbox Code Playgroud)

为什么在 selenium 中没有移动到元素并打破所有层的操作。这是用户界面。这是在 UI 模式下工作,而不是在无头模式下工作,睡眠了 6 分钟但没有解决,所以这不是时间问题

在此处输入图片说明

java selenium xpath css-selectors webdriverwait

4
推荐指数
3
解决办法
1万
查看次数