Moving to Canada

Standard

I’m moving to Montréal, Canada ??!

It’s quite a change after living for the last 4 years in Paris. We decided to move Manon and me, for multiple reasons:

  • We both wanted to live outside of France for at least a few years. I already lived in the UK, Manon in the USA, now was our chance to live elsewhere together
  • Manon got her PhD in late 2019 and needed to work in another country for her research career

But why Montréal? We didn’t want to stay in Europe, it was too close to France and we wanted to live further away. We went on holiday in the Québec province in 2017 during 3 weeks and we liked it a lot. It’s also an important city for machine learning. Finally, it has a vibrant international community and the Québec province is very close in term of culture and social benefits to France.

Moving to another countries involves a lot of planning and changes. I’ve tried to draft a list of pros/cons and goals.

Pros/goals

  • Discovering another country and culture. Fitting in. I’m very happy to discover in depth a non-european culture. As a public servant, I’m also looking forward to understand how Canada works in terms of government, politics and policies.
  • Speaking English. Bilingualism is important to Canadians, and this is something I’m attached to as well. Most canadians are native English, I’m native French so for me it’ll be a chance to get better at speaking English. And speaking québecois as well!
  • Traveling in America. While living in Europe, we’ve explored mostly european countries, while going once or twice to America or Asia. I’m looking forward to traveling in America, there is much to do!
  • Different weather, as Canada is known for its cold winters. For now, I find it really enjoyable: Montréal under the snow is beautiful and it’s sunny and dry!
  • Discovering new food.

Cons/goals

  • Moving to another flat, filling administrative forms. I don’t find packing stuff, moving out, looking for a flat, ordering furnitures really enjoyable. We also had a ton of administrative things to take care of (immigration, health insurance, banks etc). It has been often long and stressful.
  • Staying connected to family and friends
  • Meeting new people, making new friends
  • Having enough time off to travel

I’m looking forward to being a proud canadian resident and enjoying our time here!

Asynchronous weekly retrospectives

Standard

In 2019, I worked on a team where we had to keep an eye and help 15 projects, carried out by 2 or 3 people each, each one in a different government department, spread out in Paris. We were 3 doing this job, and these projects were part of the same cohort.

It was important for us to know what was going on, at least on a weekly basis, and everyone wanted to know what the others were up to. In corporate land, this need is called reporting, and it’s usually very cumbersome, ineffective and boring. We tried to do it differently and came up with a new process: we imagined and built a specific tool for this.

It’s called Bulletins.

What is it

Bulletins is a weekly retrospective tool for multiple projects or teams. It lets people reflect on their past week with 4 questions which can be answered super quickly:

  • What’s the team mood?
  • What were the main goals this week?
  • What worked great and what was harder?
  • Do we need help?

It’s asynchronous and transparent at its heart. All teams can fill their retrospective when they want through a simple web interface, as long as it’s before Friday 3 PM. On Fridays at 3 PM, everyone gets a weekly recap email with all filled retrospectives. The web interface lets everyone browse through previous retrospectives by week or by team. It comes with email and Slack integrations.

What does it look like

Filling out the weekly form

Browsing through previous bulletins by team

What tool is this

We imagined and built it. It’s a simple Laravel application, available as an open source software, released under the GNU Affero General Public License v3.0 (AGPL v3.0). The interface is translated in English and French.

There is an extensive documentation online, going through the various features, deployment, configuration and more details. It runs on a very light container: 50 Mo of RAM is enough.

For you

I think this tool can be helpful for you. Weekly retrospectives are very common. If you’re interested by asynchronous workflows, owning your data, archiving it, sharing it with others, Bulletins is here for you.

I’d be happy to know if you’re using it. You can also get in touch with me if you’d like to deploy it at work and you’d like some help.

Grèves à la SNCF et à la RATP : modalités de remboursement

Standard

La France subit un mouvement de grève interprofessionnelle depuis le 5 décembre 2019. Les transports ferrés sont particulièrement affectés en conséquence des absences de personnel à la SNCF et à la RATP. Que prévoit le contrat des transports collectifs en Île-de-France en cas de grève ? Quelles sont les modalités de remboursement ?

Inutile de faire des réclamations

Les transports ferrés en Île-de-France sont assurés par la SNCF ou la RATP pour les métros, trams, RER et Transilien. C’est Île-de-France Mobilités qui organise les transports dans la région Île-de-France et qui stipule les modalités de mise en oeuvre dans divers contrats (plan de transport, information voyageurs, travaux, situations dégradées). La SNCF et la RATP ne vont pas au-delà des clauses des contrats auxquelles elles sont soumises : les contrats spécifient les modalités de remboursement en cas de grèves. Ainsi, il est peu utile de chercher à obtenir un remboursement en effectuant une réclamation à titre individuel.

Engagement de service en cas de grève

Je me suis intéressé au contrat liant Île-de-France Mobilités et la RATP pour la période 2016-2020, que l’on retrouve en intégralité en ligne. Le contrat liant Île-de-France Mobilités et la SNCF est similaire et vous pouvez le retrouver en ligne également.

Responsabilité

En cas de grève, l’article 25 reporte la responsabilité des grèves du personnel sur la RATP.

Les grèves du personnel RATP sont de l’entière responsabilité de la RATP, qui en assume les conséquences en termes de production d’offre et en termes financiers.

Niveau de service

Lorsque la RATP n’est pas en mesure d’assurer le plan de transport prévu en conséquence de grèves du personnel, le contrat donne priorité au maintien du service sur les heures de pointe sur chacun des sous-réseaux (comprendre des différentes lignes).

en cas de perturbations significatives résultant d’un préavis de grève pour un jour donné, lorsque le service prévisible est inférieur ou égal à 75% du service contractuel de référence sur un ou plusieurs sous-réseaux, la RATP s’engage à maintenir un niveau de service d’au moins 50% du service normal pour chacun des sous-réseaux aux heures de pointes.

Le plan de transport proposé par la RATP est approuvé par le STIF.

Ceci est spécifié dans l’article 26 du contrat.

Remboursement

Nous abordons maintenant l’enjeu de toutes les interrogations : le remboursement. Vous n’avez pas pu vous déplacer, l’absence de transport vous a causé beaucoup de tracas, vous souhaitez obtenir réparation. L’article 27 pose les principes.

la RATP s’engage à rembourser les voyageurs en cas de défaut d’exécution du plan de transport adapté ou du plan d’information lorsque la RATP est directement responsable de ce défaut d’exécution. Ce remboursement est à la charge de l’entreprise.

Le contrat renvoie à l’annexe I-C-2 pour les modalités de remboursement. Il prévoit un remboursement partiel ou total lorsqu’un client n’aura pas pu utiliser son titre de transport en raison de l’exécution d’un plan de transport non satisfaisant. L’inexécution du plan de transport sera appréciée par sous-réseau.

Les clients sont remboursés en fonction des titres dont ils disposent. Il y a deux cas :

  • les abonnements : ils sont remboursés au prorata du nombre de jours d’inexécution. Pour les abonnements mensuels, c’est une fraction du nombre de jours dans le mois, à l’année une fraction du nombre de jours sur 365 jours. Pour les forfaits mois et semaine, il est prévu une réduction des prix des abonnements en vente dans les périodes suivant la grève. Pour les abonnés annuels, il est prévu une réduction des mensualités.
  • les billets : le contrat ne prévoit pas de remboursement car les billets sont valables sur une longue période.

Ainsi, pour un abonné Navigo annuel, on peut s’attendre à un remboursement de 2,27 € / jour (sur la base d’un prix annuel de 827,20 € pour les abonnements toutes zones). Pour un Navigo mensuel, la réduction sera aux alentours de 2,40 € / jour.

L’annexe précise enfin qu’il est possible de faire une réclamation directement auprès de la SNCF ou de la RATP, sans garantie de succès.

En cas de manquement marginal dans la mise en œuvre du plan de transport ou du plan d’information, le client pourra, s’il le désire, adresser une demande de remboursement.

Dernièrement, il est utile de préciser que Île-de-France Mobilités peut négocier avec les transporteurs pour mettre en place des mesures compensatoires qui vont au-delà des clauses du contrat.

Analyse des mouvements de grève à la SNCF depuis 1947

Standard

Plusieurs syndicats de la SNCF ont déposé un préavis de grève reconductible, à partir du 5 décembre 2019. À cette occasion, je me suis intéressé à l’évolution quantitative des mouvements sociaux à la SNCF depuis 1947. Les données des mouvements sociaux des 10 premières années de la SNCF (entre 1937 et 1947) ne sont pas disponibles actuellement. Cette analyse est basée sur le jeu de données « Journées perdues lors de mouvements sociaux chaque année depuis 1947 » mis à disposition par la SNCF en open data.

Une nette diminution des effectifs

Évolution des effectifs en équivalent temps plein à la SNCF entre 1947 et 2018

Le résultat est spectaculaire : l’effectif de la SNCF suit une nette tendance à la baisse depuis 1947 avec une diminution drastique des effectifs en équivalent temps plein. On dénombrait 471 325 ETP en 1948 contre 142 236 ETP en 2018 ; une division par 3,3 des effectifs en 70 ans.

Pour prendre en compte ce facteur dans les analyses, on s’intéressera donc au nombre de jours de grève par agent, résultat du rapport entre le nombre de jours de grève comptabilisé sur une période et l’effectif à disposition sur cette même période. Il permettra d’apprécier la manière dont les mouvements ont été suivis.

Chiffre clés sur les grèves à la SNCF

Entre 1947 et 2018, on dénombre :

  • un total de 29,7 millions de journées de travail en grève ;
  • une moyenne de 1,5 jours de grève par ETP et par an ;
  • 39 années (54 % de la période) où le nombre de jours de grève par agent est inférieur à 1 ;
  • 4 années de grèves marquées, où le nombre de jours de grève par agent était supérieur à 5 (les années 1947, 1953, 1968 et 1995).

Principaux mouvements sociaux

Les 5 années où les mouvements sociaux ont été les plus suivis sont les suivantes :

  • 1968 (grève générale française), avec 14,63 jours de grève par agent
  • 1953 (statut et retraite des fonctionnaires), avec 7,52 jours de grève par agent
  • 1947 (hausse des salaires et plan Marshall), avec 6,49 jours de grève par agent
  • 1995 (retraites et révision du statut), avec 5,82 jours de grève par agent
  • 2018 (disparition du statut de cheminot), avec 4,69 jours de grève par agent

En regardant les principaux mouvements sociaux, on constate que sur les 10 années les plus suivies, 5 se sont produites depuis 1995.

10 principales années de mouvements sociaux à la SNCF entre 1947 et 2018

Tendance

Fait-on plus grève qu’autrefois ? J’ai tenté de répondre à cette question en m’intéressant au nombre de jours moyen de grève par agent par période de 5 ans. On obtient le graphique suivant.

Nombre de jours moyen de grève par agent par période de 5 ans entre 1947 et 2018

En se rappelant que la moyenne annuelle du nombre de jours de grève par agent est de 1,5, on constate que depuis 2005 on a tendance à avoir plus de mouvements sociaux suivis et plus réguliers.

Taux de réponse à la Commission d’accès aux documents administratifs

Standard

En France, toute personne a le droit d’obtenir communication de nombreux documents administratifs. Les documents administratifs ont plusieurs formes (dossiers, rapports, études, statistiques, codes sources, bases de données etc.) et plusieurs supports (écrit, enregistrement, fichier informatique etc.). On parle de documents administratifs lorsqu’un document est produit ou reçu par une administration (service de l’État, collectivité territoriale, établissement public etc.) ou par un organisme privé dans le cadre d’une mission de service public (la SNCF par exemple). La base légale française est la loi du 17 juillet 1978, récemment modifiée par la Loi pour une République numérique. Pour connaître le cadre juridique précis actuel, je vous invite à consulter cette présentation.

Processus de demande d’un document administratif

Le processus de demande d’un document administratif est détaillé dans une fiche sur service-public.fr ainsi que sur le site web de la Cada. Si je cherche à le résumer :

  • Vous contactez la structure qui détient le document administratif en demandant la communication ou la publication de documents administratifs ;
  • La structure peut accepter ou refuser votre demande ou refuser tacitement votre demande sans réponse dans un délai d’un mois ;
  • Après le refus explicite ou tacite de la structure, vous pouvez saisir la Commission d’accès aux documents administratifs lui demandant de se prononcer sur votre demande initiale.

La Cada examine alors votre demande initiale et tente de rentrer en contact avec la structure visée par votre demande. À l’issu de ce travail, la commission rend un avis favorable ou défavorable à votre demande, en motivant son avis. Les avis de la Cada sont intégralement disponibles en ligne après quelques mois, une fois anonymisés, au sein d’un jeu de données et sur un site web.

Calculer le taux de réponse à la commission

Échanges menés par la Cada

Lors de l’instruction de votre demande, la Commission cherche à entrer en contact avec la structure destinataire de votre demande initiale. Cet échange permet à la commission de rendre un avis éclairé et d’appréhender la nature des documents administratifs visés par la demande. Malheureusement, tout le monde ne répond pas à la commission. Quand c’est le cas, la commission rend tout de même avis, tout en faisant apparaître dans l’avis le fait qu’elle n’a pas réussi à obtenir une réponse de la structure. Vous pouvez consulter un avis où cette situation s’est produite.

On retrouve alors une formule de ce style dans l’avis :

En l’espèce et en l’absence de réponse du président-directeur général de la RATP à la date de sa séance, elle estime que le document sollicité se rapporte aux missions de service public assurées par la RATP et que, par suite, celui-ci est communicable à toute personne qui en fait la demande, en application des dispositions précédemment mentionnées. Elle émet donc un avis favorable.

Les avis de la Cada étant disponibles sous une Licence Ouverte, il est possible de calculer un taux de réponse à la commission.

Détails du calcul de taux de réponse

On ne conserve que les avis depuis l’année 2016, pour les structures qui ont fait l’objet d’au moins 10 avis rendus par la Cada. On détermine qu’une structure n’a pas répondu à la Cada quand on retrouve dans l’avis de la Cada la mention des mots En l’absence de réponse. À la date de l’analyse, les avis les plus récents étaient datés de mars 2019. L’analyse porte donc sur la période janvier 2016 – mars 2019. Avec ces contraintes, on arrive à un total de 5 602 avis.

Une partie des résultats obtenus sont présentés dans la figure suivante.

Extrait des taux de réponse à la Cada pour les principales structures visées par une demande sur la période janvier 2016 – mars 2019.

En complément des principaux résultats, vous pourrez retrouver :

PS : Il ne faut pas confondre taux de réponse à la Cada et taux de réponse aux demandes de documents administratifs. Les demandes s’effectuant directement auprès des structures qui détiennent des documents n’étant pas centralisées ou mises à disposition librement, il est en l’espèce impossible d’appréhender ce taux de réponse.

Conférence : J’ai demandé mes données personnelles grâce au RGPD

Standard

Le 21 novembre 2019, j’ai eu le plaisir d’intervenir à la conférence Codeurs en Seine à Rouen. 1 200 participants, qui ne se déroule pas à Paris et une inscription gratuite : voilà une conférence peu commune. Mon intervention retenue portait sur l’exercice du droit à la portabilité des données introduit par le RGPD, qui permet d’obtenir communication de ses données personnelles et de les analyser.

La description de mon intervention est la suivante :

Le RGPD est entré en application en France fin mai 2018. Depuis, j’ai exercé mon droit d’accès à mes données auprès de plusieurs entreprises et j’ai appris sur moi-même.

Je propose de présenter les démarches à suivre pour obtenir ses données, les analyses de mes données obtenues auprès de Trainline (billets de train), Monoprix (supermarché) et mes recherches Google.

Enfin, je termine avec une ouverture sur le futur de l’accès et la portabilité des données.

J’avais eu l’opportunité dans le passé de parler de cette initiative auprès Trainline sur mon blog et des autres sur Twitter. Mais rien ne remplace l’opportunité de présenter ceci de vive voix devant quelques centaines de personnes.

Vous pouvez retrouver mon intervention au format PDF ou directement sur Google Slides.

Publication de la régularité quotidienne de la SNCF

Standard

La SNCF est l’entreprise ferroviaire publique française. La filiale « voyageurs » de la SNCF, SNCF Mobilités, transporte plus de 4 millions de personnes tous les jours dans pas moins de 15 000 trains. Une écrasante majorité des voyageurs emprunte des « trains du quotidien ». Ainsi, sur les 4 millions de voyageurs transportés, 2,7 millions de voyageurs empruntent les Transilien et 1 million de voyageurs empruntent les TER (trains express régionaux).

Dans cet article, j’aborde la publication des indicateurs de régularité de la SNCF. La régularité permet d’apprécier le respect de la ponctualité du plan de transport prévu. En termes moins savants : « Est-ce que mon train est arrivé à l’heure ? »

Cet article de blog traite uniquement de la publication des indicateurs de la régularité et non des mesures prises par la SNCF pour améliorer la régularité. La SNCF est engagée au quotidien pour améliorer la régularité des trains circulant ; en témoigne les mesures mises en oeuvre pour améliorer la ponctualité des trains au départ ou l’identification de trains présentant une irrégularité chronique (page 44 du rapport de la Cour des comptes « Les transports express régionaux à l’heure de l’ouverture à la concurrence » du 23 octobre 2019).

Vous avez un train à prendre ? Voici le jeu de données de la régularité de la SNCF à la journée.

Une diffusion de la régularité incomplète

J’ai déjà eu l’occasion d’aborder le sujet de la démarche open data de la SNCF précédemment. Un de mes grands regrets concerne la faible diffusion des éléments de la régularité. Actuellement, la régularité est publiée selon un triplet mois, région, axe au sein de 4 jeux de données à l’échelle nationale. On peut ainsi avoir l’information qu’en septembre 2019, la ligne RER A affiche une ponctualité de 87,6 %. C’est une première information, toutefois, ceci ne correspond pas entièrement à l’attente des usagers. En effet, les usagers des « trains du quotidien » sont intéressés par la ponctualité du lundi au vendredi et durant les heures de pointe, pour ceux qui ont des horaires de bureau.

Capture d’écran du site data.sncf.com. Régularité mensuelle de la ligne RER B.

En mettant à disposition des indicateurs mensuels et par ligne, la régularité en jours ouvrés et en pointes est noyée au milieu de la régularité en heures creuses et durant les week-ends (malgré ce défaut, le calcul de la régularité des Transilien pondère sur le nombre de voyageurs, et permet donc une bonne représentativité de la moyenne faite à l’échelle du mois). Au-delà de ce seul exemple, chaque usager devrait avoir les moyens de calculer ou d’accéder à la régularité des transports qu’il utilise. Au minimum, avoir à disposition un indicateur représentatif de sa réalité d’usage des transports ferroviaires.

D’autres initiatives diffusant des informations de régularité

Ma ponctualité Transilien

La branche Transilien de la SNCF propose sur le site maponctualite.transilien.com une information de la régularité plus fine. En effet, on peut obtenir une donnée de régularité après avoir choisi :

  • une ligne du réseau Transilien ;
  • une gare de départ ;
  • une gare d’arrivée ;
  • une plage horaire (parmi 4 choix) ;
  • une date.

On obtient ensuite un indicateur unique pour la situation choisie. Il n’est pas possible d’obtenir des données sur plusieurs jours (la régularité entre 2 gares, sur la pointe du matin, en semaine, sur un trimestre par exemple). L’export (ou la publication) des données sous-jacentes n’est pas possible, en violation des obligations introduites par la Loi pour une République numérique.

Capture d’écran du site maponctualite.transilien.com. Ce site permet d’obtenir la ponctualité entre 2 gares d’une ligne, sur une tranche horaire prédéfinie et pour une journée donnée. Les données sous-jacentes ne sont pas proposées au téléchargement.

L’Autorité de la qualité de service dans les transports

En rédigeant cet article, j’ai découvert un service du Ministère des Transports : l’autorité de la qualité de service dans les transports (AQST). Ce service a la mission suivante :

contribuer à l’amélioration de la qualité de service dans les transports de voyageurs terrestres (ferroviaires et routiers, urbains et interurbains), maritimes et aériens, en accordant une attention particulière à la régularité, à la ponctualité et à la qualité de l’information diffusée aux voyageurs.

J’espérais trouver des informations inédites de régularité. En parcourant le site web, j’ai pu constater que les données de régularité diffusées pour le ferroviaire étaient identiques aux données open data de la SNCF pour les différentes familles de transport. On retrouve donc au mieux des indicateurs mensuels et par ligne.

Capture d’écran du site web de l’AQST. On y trouve la régularité des TER en région Normandie sur les 12 derniers mois. Ces données sont identiques aux indicateurs mensuels publiés par la SNCF en open data.

Plus de données ?

Je m’étonne de ne pas voir plus de données publiées par l’AQST ou l’autorité de régulation des transports. En tant qu’autorité de régulation et avec l’aide de la Loi pour une République numérique, ces informations peuvent être obtenues des opérateurs de transport et publiées en open data, sans restrictions d’utilisation. Les choses devraient changer dans les années à venir : le décret n°2019-851 du 20 août 2019 relatif aux informations portant sur les services publics de transport ferroviaire de voyageurs liste les éléments que les autorités organisatrices peuvent obtenir des entreprises fournissant des services de transport au public.

La régularité des trains de la veille : mes trains d’hier

La SNCF propose depuis quelques mois un rapport quotidien sur la régularité des différentes lignes et axes sur le jour précédent. Cette application se nomme Mes trains d’hier. En complément de la régularité, les faits majeurs à l’origine d’une régularité peu satisfaisante sont indiqués.

Capture d’écran de l’application Mes trains d’hier. On y retrouve la ponctualité des trains de la veille pour différents modes de transports et par ligne.

Nouveauté notable : les indicateurs de régularité concernent une ligne et une seule journée. En revanche, seules sont affichées les données de la veille. Impossible de choisir une date précédente ou d’exporter des données.

Heureux de voir de telles informations disponibles en ligne, j’ai décidé d’écrire du code sous licence libre visant à récupérer automatiquement ces informations, les structurer et les archiver. Je publie ensuite ces données brutes dans un jeu de données sous licence ouverte.

Ce site web est inspecté automatiquement toutes les heures, car bien que le nom « Mes trains d’hier » suggère que les données affichées soient toujours celles de la veille, en pratique ceci n’est pas respecté. Il est possible que suite à un retard de traitement deux journées soient affichées sur une période de 24 heures. Un traitement toutes les heures permet de ne pas rater des informations potentiellement publiées pendant un court laps de temps.

Je serais heureux que des élus, associations d’usagers, journalistes et citoyens trouvent une utilité à ce jeu de données.

Le ferroviaire, atout majeur de la mobilité en France

Personne n’aime voyager à bord d’un train en retard. Encore moins voir son train supprimé. Le réseau français et la qualité de service globale du pays sont cependant un des meilleurs en Europe et dans le monde, comme le présente ce rapport du BCG. Le secteur ferroviaire français doit être préservé, amélioré et financé dans de justes proportions. Le train est un moyen fiable, efficace pour transporter des centaines de personnes, rapide et écologique. Préservons-le.

PS : cet article a été finalisé à bord d’un TER en région Normandie. Ce train était à l’heure.

Data-driven policies: sea-rescue operations in France

Standard

In October 2019, I had the chance to give a class at the the Paris Institute of Political Studies, Sciences Po. I talked about what I worked on in 2018: sea-rescue operations carried out by France. Back then, I worked at the maritime affairs, part of the Ministry of Ecology. This project was named PrédiSauvetage.

As a trained software engineer myself, it’s always a chance to get to teach about other ways to work on public policies.

You can check out my presentation at the end of the post or directly on Google Slides.

Speed up checkout on CircleCI with caching

Standard

If you’ve got a long Git history or large files changing frequently in your repository, checking out the repository can take a good amount of time in your CircleCI jobs. It’s annoying when most of the time is spent on non useful tasks like checking out your code or downloading dependencies. In these situations, caching is what you need. The idea is that checking out your code takes time if you start from a blank state. If you already have a recent previous commit locally, checking out new changes will be far faster.

You can cache your Git folder with the following configuration.

    steps:
      - restore_cache:
          keys:
            - source-v1-{{ .Branch }}-{{ .Revision }}
            - source-v1-{{ .Branch }}-
            - source-v1-

      - checkout

      - save_cache:
          key: source-v1-{{ .Branch }}-{{ .Revision }}
          paths:
            - ".git"

When CircleCI encounters a list of keys, the cache will be restored from the first match. In this example, restore_cache looks for a cache hit from the current Git revision, then for a hit from the current branch, and finally for any cache hit, regardless of branch or revision. If there are multiple matches, the most recently generated cache will be used.

I was able to take down a 30-35s checkout task down to the expected 2-3s. A substantial amount of time saved for your continuous integration!

Submit a form with Puppeteer

Standard

Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium. Puppeteer runs headless by default, but can be configured to run a full browser.

A thing you will need to do when using Puppeteer is filling out and submit forms. It’s straightforward to fill fields but sometimes it’s difficult to submit the form. The submit input doesn’t have an id, it’s enclosed in multiple tags, there are multiple buttons (like a search bar in the header). An easy thing to do is to reproduce what you would do naturally: press the Enter button to submit the form.

Here is the code to do this:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto('https://www.google.com/admin');

  await page.type('#username', '[email protected]');
  await page.type('#password', 'password');
  await page.keyboard.press('Enter');

  await page.waitForNavigation();
  console.log('New Page URL:', page.url());
  await browser.close();
})();